C语言标准库的使用及说明

person 区块链    watch_later 2024-07-30 17:57:39
visibility 129    class C语言    bookmark 分享

C 语言的标准库包括了一系列为程序开发提供的预定义函数、宏和数据类型。它们被分成不同的头文件,每个头文件包含相关的功能和操作。以下是 C 语言标准库的详细介绍,包括每个头文件的功能和常用函数的使用。

1. 标准输入输出库 (stdio.h)

  • 功能: 提供输入和输出操作。
  • 常用函数:
    • printf(const char *format, ...):格式化输出到标准输出(控制台)。
    • scanf(const char *format, ...):从标准输入读取格式化输入。
    • fopen(const char *filename, const char *mode):打开文件。
    • fclose(FILE *stream):关闭文件。
    • fread(void *ptr, size_t size, size_t count, FILE *stream):从文件读取数据。
    • fwrite(const void *ptr, size_t size, size_t count, FILE *stream):向文件写入数据。
    • fseek(FILE *stream, long offset, int whence):设置文件位置指针。
    • ftell(FILE *stream):获取文件位置指针。
    • fprintf(FILE *stream, const char *format, ...):格式化输出到文件。
    • fscanf(FILE *stream, const char *format, ...):从文件读取格式化输入。
    • 示例:
      #include <stdio.h>
      
      int main() {
          FILE *file = fopen("example.txt", "w");
          if (file != NULL) {
              fprintf(file, "Hello, World!\n");
              fclose(file);
          }
          return 0;
      }
      

2. 标准库 (stdlib.h)

  • 功能: 提供内存管理、程序控制和转换功能。
  • 常用函数:
    • malloc(size_t size):分配内存。
    • calloc(size_t num, size_t size):分配并初始化内存。
    • realloc(void *ptr, size_t size):重新分配内存。
    • free(void *ptr):释放内存。
    • exit(int status):终止程序。
    • atexit(void (*func)(void)):注册程序退出时执行的函数。
    • atoi(const char *str):将字符串转换为整数。
    • atof(const char *str):将字符串转换为浮点数。
    • 示例:
      #include <stdlib.h>
      #include <stdio.h>
      
      int main() {
          int *array = (int *)malloc(10 * sizeof(int));
          if (array == NULL) {
              printf("Memory allocation failed\n");
              return 1;
          }
          for (int i = 0; i < 10; i++) {
              array[i] = i;
          }
          free(array);
          return 0;
      }
      

3. 字符串处理库 (string.h)

  • 功能: 提供字符串操作功能。
  • 常用函数:
    • strlen(const char *str):计算字符串长度。
    • strcpy(char *dest, const char *src):复制字符串。
    • strcat(char *dest, const char *src):连接字符串。
    • strcmp(const char *str1, const char *str2):比较两个字符串。
    • strstr(const char *haystack, const char *needle):查找子字符串。
    • 示例:
      #include <string.h>
      #include <stdio.h>
      
      int main() {
          char src[50] = "Hello";
          char dest[50];
          strcpy(dest, src);
          strcat(dest, " World!");
          printf("Combined String: %s\n", dest);
          return 0;
      }
      

4. 字符处理库 (ctype.h)

  • 功能: 提供字符分类和转换功能。
  • 常用函数:
    • isdigit(int c):判断字符是否为数字。
    • isalpha(int c):判断字符是否为字母。
    • islower(int c):判断字符是否为小写字母。
    • isupper(int c):判断字符是否为大写字母。
    • tolower(int c):将字符转换为小写。
    • toupper(int c):将字符转换为大写。
    • 示例:
      #include <ctype.h>
      #include <stdio.h>
      
      int main() {
          char c = 'A';
          if (isupper(c)) {
              printf("Character is uppercase\n");
          }
          c = tolower(c);
          printf("Lowercase: %c\n", c);
          return 0;
      }
      

5. 数学库 (math.h)

  • 功能: 提供数学函数。
  • 常用函数:
    • sin(double x):计算正弦。
    • cos(double x):计算余弦。
    • tan(double x):计算正切。
    • sqrt(double x):计算平方根。
    • pow(double base, double exponent):计算幂。
    • log(double x):计算自然对数。
    • exp(double x):计算指数函数。
    • 示例:
      #include <math.h>
      #include <stdio.h>
      
      int main() {
          double value = 16.0;
          double result = sqrt(value);
          printf("Square root of %.2f is %.2f\n", value, result);
          return 0;
      }
      

6. 时间和日期库 (time.h)

  • 功能: 提供时间和日期操作功能。
  • 常用函数:
    • time(time_t *timer):获取当前时间。
    • localtime(const time_t *timer):将时间转换为本地时间。
    • gmtime(const time_t *timer):将时间转换为 UTC 时间。
    • strftime(char *str, size_t maxsize, const char *format, const struct tm *tm):格式化时间。
    • 示例:
      #include <time.h>
      #include <stdio.h>
      
      int main() {
          time_t now;
          struct tm *tm_info;
          char buffer[26];
      
          time(&now);
          tm_info = localtime(&now);
      
          strftime(buffer, 26, "%Y-%m-%d %H:%M:%S", tm_info);
          printf("Current time: %s\n", buffer);
      
          return 0;
      }
      

7. 定义库 (limits.h)

  • 功能: 提供数据类型的限制。
  • 常用宏:
    • CHAR_MAX:字符型变量的最大值。
    • INT_MAX:整型变量的最大值。
    • LONG_MAX:长整型变量的最大值。
    • 示例:
      #include <limits.h>
      #include <stdio.h>
      
      int main() {
          printf("INT_MAX: %d\n", INT_MAX);
          printf("CHAR_MAX: %d\n", CHAR_MAX);
          return 0;
      }
      

8. 错误处理库 (errno.h)

  • 功能: 提供错误码和错误处理功能。
  • 常用宏:
    • errno:错误码变量。
    • perror(const char *str):打印错误信息。
    • strerror(int errnum):返回错误码的字符串描述。
    • 示例:
      #include <errno.h>
      #include <stdio.h>
      #include <stdlib.h>
      
      int main() {
          FILE *file = fopen("nonexistent.txt", "r");
          if (file == NULL) {
              perror("Error opening file");
              return EXIT_FAILURE;
          }
          fclose(file);
          return EXIT_SUCCESS;
      }
      

9. 系统库 (unistd.h)

  • 功能: 提供系统调用和 POSIX 标准函数(主要用于 Unix/Linux 系统)。
  • 常用函数:
    • read(int fd, void *buf, size_t count):从文件描述符读取数据。
    • write(int fd, const void *buf, size_t count):向文件描述符写入数据。
    • close(int fd):关闭文件描述符。
    • fork():创建进程。
    • exec():执行程序。
    • 示例:
      #include <unistd.h>
      #include <stdio.h>
      
      int main() {
          char buf[100];
          ssize_t n = read(STDIN_FILENO, buf, sizeof(buf));
          if (n > 0) {
              write(STDOUT_FILENO, buf, n);
          }
          return 0;
      }
      

10. 动态链接库 (dlfcn.h)

  • 功能: 提供动态链接库的操作功能(主要用于 Unix/Linux 系统)。

  • 常用函数:

    • dlopen(const char *filename, int flags):加载动态库。
    • dlsym(void *handle, const char *symbol):获取符号地址。
    • dlclose(void *handle):关闭动态库。
    • 示例:
      #include <dlfcn.h>
      #include <stdio.h>
      
      int main() {
          void *handle;
          void (*func)();
          char *error;
      
          handle = dlopen("./libmylib.so", RTLD_LAZY);
          if (!handle) {
              fprintf(stderr, "%s\n", dlerror());
              return 1;
          }
          dlerror(); // Clear any existing error
      
          func = (void (*)())dlsym(handle, "my_function");
          if ((error = dlerror()) != NULL) {
              fprintf(stderr, "%s\n", error);
              return 1;
          }
      
          func(); // Call the function
      
          dlclose(handle);
          return 0;
      }
      

11. 标准定义 (stdarg.h)

  • 功能: 提供处理可变参数列表的功能。
  • 常用宏:
    • va_list:可变参数列表类型。
    • va_start(va_list ap, last):初始化 va_list
    • va_arg(va_list ap, type):访问可变参数。
    • va_end(va_list ap):结束访问。
    • 示例:
      #include <stdarg.h>
      #include <stdio.h>
      
      void print_numbers(int num, ...) {
          va_list args;
          va_start(args, num);
          for (int i = 0; i < num; i++) {
              printf("%d\n", va_arg(args, int));
          }
          va_end(args);
      }
      
      int main() {
          print_numbers(3, 10, 20, 30);
          return 0;
      }
      

12. 多字节字符库 (wchar.h)

  • 功能: 提供宽字符和多字节字符处理功能。
  • 常用函数:
    • wprintf(const wchar_t *format, ...):宽字符格式化输出。
    • wscanf(const wchar_t *format, ...):宽字符格式化输入。
    • mbstowcs(wchar_t *dest, const char *src, size_t n):多字节字符到宽字符的转换。
    • wcstombs(char *dest, const wchar_t *src, size_t n):宽字符到多字节字符的转换。
    • 示例:
      #include <wchar.h>
      #include <stdio.h>
      
      int main() {
          wchar_t wstr[] = L"Hello, World!";
          wprintf(L"%ls\n", wstr);
          return 0;
      }
      

13. 标准类型 (stddef.h)

  • 功能: 提供标准类型和宏定义。
  • 常用定义:
    • size_t:无符号整数类型,用于表示对象大小。
    • ptrdiff_t:用于表示两个指针之间的差值。
    • NULL:空指针常量。
    • 示例:
      #include <stddef.h>
      #include <stdio.h>
      
      int main() {
          size_t size = sizeof(int);
          printf("Size of int: %zu\n", size);
          return 0;
      }
      

这些标准库头文件提供了丰富的功能,使 C 语言能够进行各种基本操作,如内存管理、字符串处理、数学计算、文件操作等。每个头文件中的函数和宏都是根据 C 标准定义的,可以在大多数 C 语言编译器和平台上使用。

评论区
评论列表
menu