【C常用的标准库函数】

以下是C语言在面试和工程中常用的标准库函数的全面总结,按头文件分类,涵盖输入输出、字符串处理、内存管理、数学计算、时间处理等核心内容:


一、输入输出(stdio.h

文件操作
  1. FILE *fopen(const char *path, const char *mode)

    • 功能:打开文件。
    • 模式"r"(读)、"w"(写)、"a"(追加)、"rb"(二进制读)等。
    • 示例
      FILE *fp = fopen("data.txt", "r");
      if (!fp) {
          perror("fopen failed");
          exit(EXIT_FAILURE);
      }
      
  2. int fclose(FILE *stream)

    • 功能:关闭文件,释放资源。
    • 返回值:成功返回0,失败返回EOF
  3. size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream)

    • 功能:从文件读取二进制数据块。
    • 示例
      int data[100];
      size_t read = fread(data, sizeof(int), 100, fp);
      
  4. size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream)

    • 功能:向文件写入二进制数据块。
  5. int fseek(FILE *stream, long offset, int whence)

    • 功能:移动文件指针。
    • 参数whence可选SEEK_SET(文件头)、SEEK_CUR(当前位置)、SEEK_END(文件尾)。
格式化输入输出
  1. int printf(const char *format, ...)

    • 功能:格式化输出到标准输出。
    • 格式符%d(整数)、%f(浮点数)、%s(字符串)、%p(指针)。
  2. int scanf(const char *format, ...)

    • 功能:从标准输入读取格式化数据。
    • 注意:避免缓冲区溢出,推荐fgets+sscanf组合。
  3. int fprintf(FILE *stream, const char *format, ...)

    • 功能:格式化输出到文件。
  4. int sprintf(char *str, const char *format, ...)

    • 功能:格式化输出到字符串。
    • 风险:可能导致缓冲区溢出,推荐使用snprintf
字符/字符串输入输出
  1. int fgetc(FILE *stream)

    • 功能:从文件读取一个字符。
  2. char *fgets(char *s, int size, FILE *stream)

    • 功能:从文件读取一行字符串(安全函数)。
    • 示例
      char buffer[100];
      fgets(buffer, sizeof(buffer), stdin);
      
  3. int fputc(int c, FILE *stream)

    • 功能:向文件写入一个字符。
  4. int fputs(const char *s, FILE *stream)

    • 功能:向文件写入字符串。

二、字符串处理(string.h

字符串操作
  1. char *strcpy(char *dest, const char *src)

    • 功能:复制字符串(不安全,可能溢出)。
  2. char *strncpy(char *dest, const char *src, size_t n)

    • 功能:复制最多n个字符(更安全)。
    • 注意:不会自动添加\0,需手动处理。
  3. char *strcat(char *dest, const char *src)

    • 功能:拼接字符串(不安全)。
  4. char *strncat(char *dest, const char *src, size_t n)

    • 功能:拼接最多n个字符(更安全)。
字符串比较与搜索
  1. int strcmp(const char *s1, const char *s2)

    • 返回值:0(相等)、正数(s1 > s2)、负数(s1 < s2)。
  2. int strncmp(const char *s1, const char *s2, size_t n)

    • 功能:比较前n个字符。
  3. char *strchr(const char *s, int c)

    • 功能:查找字符c首次出现的位置。
  4. char *strstr(const char *haystack, const char *needle)

    • 功能:查找子字符串。
内存操作
  1. void *memcpy(void *dest, const void *src, size_t n)

    • 功能:复制内存块(不处理重叠)。
  2. void *memmove(void *dest, const void *src, size_t n)

    • 功能:复制内存块(处理重叠区域)。
  3. int memcmp(const void *s1, const void *s2, size_t n)

    • 功能:比较内存块内容。

三、动态内存管理(stdlib.h

  1. void *malloc(size_t size)

    • 功能:分配未初始化的内存块。
    • 注意:需检查返回值是否为NULL
  2. void *calloc(size_t nmemb, size_t size)

    • 功能:分配并初始化为0的内存块。
  3. void *realloc(void *ptr, size_t size)

    • 功能:调整已分配内存的大小。
    • 注意:可能返回新地址,原数据保留。
  4. void free(void *ptr)

    • 功能:释放内存,避免内存泄漏。
类型转换
  1. int atoi(const char *nptr)

    • 功能:字符串转整数。
  2. double atof(const char *nptr)

    • 功能:字符串转浮点数。
  3. long int strtol(const char *nptr, char **endptr, int base)

    • 功能:字符串转长整数(支持进制转换)。
环境控制
  1. void exit(int status)

    • 功能:终止程序,status为0表示正常退出。
  2. int system(const char *command)

    • 功能:执行系统命令。
    • 示例
      system("ls -l"); // 执行Shell命令
      

四、数学计算(math.h

  1. double sqrt(double x)

    • 功能:计算平方根。
  2. double pow(double x, double y)

    • 功能:计算xy次幂。
  3. double ceil(double x)

    • 功能:向上取整。
  4. double floor(double x)

    • 功能:向下取整。
  5. double fabs(double x)

    • 功能:浮点数绝对值。

注意:编译时需链接数学库(-lm)。

gcc program.c -o program -lm

五、时间处理(time.h

  1. time_t time(time_t *tloc)

    • 功能:获取当前时间戳(从1970-01-01开始的秒数)。
  2. struct tm *localtime(const time_t *timep)

    • 功能:将时间戳转换为本地时间的结构体。
  3. char *ctime(const time_t *timep)

    • 功能:将时间戳转换为可读字符串。
  4. size_t strftime(char *s, size_t max, const char *format, const struct tm *tm)

    • 功能:格式化时间输出。
    • 示例
      time_t now = time(NULL);
      struct tm *tm = localtime(&now);
      char buffer[100];
      strftime(buffer, sizeof(buffer), "%Y-%m-%d %H:%M:%S", tm);
      

六、字符处理(ctype.h

  1. int isalpha(int c)

    • 功能:判断是否为字母。
  2. int isdigit(int c)

    • 功能:判断是否为数字。
  3. int toupper(int c)

    • 功能:将字符转换为大写。
  4. int tolower(int c)

    • 功能:将字符转换为小写。

七、调试与断言(assert.h

  1. void assert(int expression)
    • 功能:若expression为假,终止程序并输出错误信息。
    • 示例
      assert(ptr != NULL); // 确保指针非空
      
    • 注意:可通过定义NDEBUG宏禁用断言。

八、可变参数处理(stdarg.h

  1. va_list

    • 类型:用于遍历可变参数的变量类型。
  2. void va_start(va_list ap, last_arg)

    • 功能:初始化va_list
  3. type va_arg(va_list ap, type)

    • 功能:获取下一个参数。
  4. void va_end(va_list ap)

    • 功能:清理资源。

示例:实现可变参数求和

#include 
int sum(int count, ...) {
    va_list ap;
    va_start(ap, count);
    int total = 0;
    for (int i = 0; i < count; i++) {
        total += va_arg(ap, int);
    }
    va_end(ap);
    return total;
}

九、错误处理(errno.h

  1. extern int errno

    • 全局变量:记录最近一次错误代码。
  2. void perror(const char *s)

    • 功能:输出错误描述。
    • 示例
      FILE *fp = fopen("nonexistent.txt", "r");
      if (!fp) {
          perror("Error"); // 输出 "Error: No such file or directory"
      }
      
  3. char *strerror(int errnum)

    • 功能:将错误码转换为描述字符串。

十、信号处理(signal.h

  1. void (*signal(int sig, void (*handler)(int)))(int)
    • 功能:注册信号处理函数。
    • 示例
      #include 
      void handle_sigint(int sig) {
          printf("Received SIGINT\n");
          exit(0);
      }
      signal(SIGINT, handle_sigint); // 处理Ctrl+C
      

十一、其他重要函数

stdlib.h中的实用函数
  1. void qsort(void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *))

    • 功能:快速排序。
  2. void *bsearch(const void *key, const void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *))

    • 功能:二分查找。
setjmp.h中的非局部跳转
  1. int setjmp(jmp_buf env)
  2. void longjmp(jmp_buf env, int val)
    • 功能:实现跨函数跳转(慎用)。

十二、总结与注意事项

  1. 安全性:优先使用安全函数(如strncpy替代strcpy)。
  2. 错误检查:检查文件操作、内存分配等可能失败的函数的返回值。
  3. 资源释放:确保释放动态分配的内存和关闭打开的文件。
  4. 可移植性:避免使用平台相关函数(如Windows的_getch)。

掌握这些函数及其使用场景,能够有效应对C语言在工程和面试中的各类需求。

你可能感兴趣的:(c语言,算法,开发语言)