C语言中不常用到的一些函数

basename

功能:
basename() 函数用于获取路径中的文件名部分,即去除路径中的目录部分。

函数原型:

复制代码
char *basename(char *path);

参数说明:

  • path: 指向以null结尾的字符串,表示文件路径。

用法示例:

复制代码
#include <stdio.h>
#include <libgen.h>

int main() {
    char path[] = "/home/user/example.txt";
    char *base = basename(path);
    printf("Base name: %s\n", base);
    return 0;
}

strrchr

功能:
strrchr() 函数在给定字符串中从后向前查找指定字符,并返回最后一个匹配的字符的指针。

函数原型:

复制代码
char *strrchr(const char *str, int character);

参数说明:

  • str: 指向以null结尾的字符串。
  • character: 要查找的字符。

用法示例:

复制代码
#include <stdio.h>
#include <string.h>

int main() {
    char str[] = "hello world";
    char *ptr = strrchr(str, 'l');
    if (ptr != NULL)
        printf("Last occurrence of 'l' at position: %ld\n", ptr - str);
    else
        printf("Character not found\n");
    return 0;
}

asprintf

功能:
asprintf() 函数用于根据格式化字符串创建动态分配的字符串,并将结果存储在提供的指针中。

函数原型:

复制代码
int asprintf(char **strp, const char *format, ...);

参数说明:

  • strp: 用于存储格式化字符串的指针的地址。
  • format: 格式化字符串。
  • ...: 可变数量的参数,用于填充格式化字符串中的占位符。

用法示例:

复制代码
#include <stdio.h>
#include <stdlib.h>

int main() {
    char *str;
    int len = asprintf(&str, "Value of pi: %.2f", 3.14159);
    printf("Formatted string: %s\n", str);
    printf("Length of formatted string: %d\n", len);
    free(str);
    return 0;
}

glob

功能:
glob() 函数用于根据提供的匹配模式搜索文件系统中的文件。匹配结果存储在提供的 glob_t 结构中。

函数原型:

复制代码
int glob(const char *pattern, int flags, int (*errfunc) (const char *epath, int eerrno), glob_t *pglob);

参数说明:

  • pattern: 匹配模式字符串。
  • flags: 匹配选项标志。
  • errfunc: 错误处理函数。
  • pglob: 指向 glob_t 结构的指针,用于存储匹配结果。

用法示例:

复制代码
#include <stdio.h>
#include <glob.h>

int main() {
    glob_t results;
    int status = glob("/usr/bin/*", 0, NULL, &results);
    if (status == 0) {
        printf("Matched files:\n");
        for (int i = 0; i < results.gl_pathc; ++i) {
            printf("%s\n", results.gl_pathv[i]);
        }
        globfree(&results);
    } else {
        printf("Error occurred\n");
    }
    return 0;
}

scandir

功能:
scandir() 函数用于扫描指定目录中的文件,并将结果存储在提供的指针数组中。它还可以通过可选的过滤器和比较器来筛选和排序结果。

函数原型:

复制代码
int scandir(const char *dir, struct dirent ***namelist, int (*filter)(const struct dirent *), int (*compar)(const struct dirent **, const struct dirent **));

参数说明:

  • dir: 指定要搜索的目录路径。
  • namelist: 存储结果的指针数组。
  • filter: 可选的过滤函数,用于筛选结果。
  • compar: 可选的比较函数,用于对结果进行排序。

用法示例:

复制代码
#include <stdio.h>
#include <stdlib.h>
#include <dirent.h>

int main() {
    struct dirent **namelist;
    int n = scandir(".", &namelist, NULL, alphasort);
    if (n >= 0) {
        printf("Files in current directory:\n");
        for (int i = 0; i < n; ++i) {
            printf("%s\n", namelist[i]->d_name);
            free(namelist[i]);
        }
        free(namelist);
    } else {
        printf("Error occurred\n");
    }
    return 0;
}

strtoul

功能:
strtoul() 函数将字符串表示的数字转换为无符号长整型数。它可以指定转换的基数(如十进制、十六进制等),并且可以检测并返回转换结束的位置。

函数原型:

复制代码
unsigned long int strtoul(const char *nptr, char **endptr, int base);

参数说明:

  • nptr: 指向要转换的字符串。
  • endptr: 用于存储转换结束位置的指针。
  • base: 进制基数。

用法示例:

复制代码
#include <stdio.h>
#include <stdlib.h>

int main() {
    char str[] = "42";
    char *end;
    unsigned long value = strtoul(str, &end, 10);
    printf("Parsed value: %lu\n", value);
    printf("End pointer: %s\n", end);
    return 0;
}

strdup

功能:
strdup() 函数用于复制给定的字符串,并返回一个新的动态分配的字符串副本。

函数原型:

复制代码
char *strdup(const char *str);

参数说明:

  • str: 要复制的字符串。

用法示例:

复制代码
#include <stdio.h>
#include <string.h>

int main() {
    const char *source =

 "Hello, world!";
    char *copy = strdup(source);
    printf("Copied string: %s\n", copy);
    free(copy);
    return 0;
}
相关推荐
small_wh1te_coder3 天前
GCC深度剖析:从编译原理到嵌入式底层实战
汇编·c++·面试·嵌入式·状态模式·c
梁辰兴4 天前
数据结构:串、数组与广义表
开发语言·数据结构·c··数组·广义表
程序员莫小特6 天前
老题新解|求一元二次方程
数据结构·c++·算法·青少年编程·c·信息学奥赛一本通
HW-BASE10 天前
《C语言》指针练习题--1
c语言·开发语言·单片机·算法·c
略无慕艳意11 天前
Notes of Effective CMake
c++·c·cmake
HW-BASE12 天前
C语言的结构体与联合体
c语言·单片机·嵌入式·编程·c
HW-BASE12 天前
C语言控制语句练习题1
c语言·开发语言·单片机·算法·嵌入式·c
oioihoii13 天前
CRT调试堆检测:从原理到实战的资源泄漏排查指南
开发语言·前端·c++·c
乖乖是干饭王16 天前
FreeRTOS源码分析二:task启动(RISCV架构)
架构·c·riscv·rtos
南玖yy20 天前
C++多态:面向对象编程的灵魂之
运维·开发语言·数据库·c++·后端·c·c语音