C 语言的标准库包括了一系列为程序开发提供的预定义函数、宏和数据类型。它们被分成不同的头文件,每个头文件包含相关的功能和操作。以下是 C 语言标准库的详细介绍,包括每个头文件的功能和常用函数的使用。
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;
}
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;
}
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;
}
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;
}
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;
}
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;
}
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;
}
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;
}
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;
}
功能: 提供动态链接库的操作功能(主要用于 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;
}
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;
}
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;
}
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 语言编译器和平台上使用。