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;
}
相关推荐
我要出家当道士4 小时前
Nginx单向链表 ngx_list_t
数据结构·nginx·链表·c
学习前端的小z5 天前
【C++】小乐乐求和问题的高效求解与算法对比分析
c
集大周杰伦7 天前
C语言指针与数组深入剖析及优化示例 指针解读 数组与指针的关系
c语言·c
学习前端的小z8 天前
【C++ 】for 循环系统深入解析与实现法比较
c
无为扫地僧9 天前
五、windows上vscode构建c/c++环境
c++·vscode·c
学习前端的小z9 天前
【C++】小乐乐求和题目分析n变量类型讨论
c
学习前端的小z9 天前
【C++】青蛙跳跃问题解析与解法
c
枫の准大一11 天前
【C++游记】Vector的使用和模拟实现
c
学习前端的小z13 天前
【C++】数的性质问题分析与优化
c
talentestors17 天前
Codeforces Round 992 (Div. 2) 解题报告
c++·c·题解·cpp