在Linux中,使用标准IO库,进行格式化IO操作
函数 | 目标/来源 | 特点 |
---|---|---|
printf | 标准输出 | 最基础输出函数 |
fprintf | 文件流(FILE* ) | 可输出到文件或标准错误流 |
dprintf | 文件描述符(int fd ) | 适用于低级I/O操作 |
sprintf | 字符数组 | 需手动管理缓冲区,有溢出风险 |
snprintf | 字符数组(带大小限制) | 安全,推荐替代sprintf |
scanf | 标准输入 | 需用& 取变量地址 |
fscanf | 文件流(FILE* ) | 从文件读取结构化数据 |
sscanf | 字符串 | 解析字符串中的格式化数据 |
输出函数
1.printf()
-
作用:将格式化数据输出到标准输出(stdout)。
-
示例:
-
int num = 42; printf("Value: %d\n", num); // 输出:Value: 42
2.fprintf()
-
作用:将格式化数据输出到指定的文件流(如文件、标准错误流)。
-
示例:
FILE *file = fopen("log.txt", "w"); fprintf(file, "Log: %s\n", "File created"); // 写入文件 fprintf(stderr, "Error: Invalid input\n"); // 输出到标准错误流
3.dprintf()
-
作用:将格式化数据输出到文件描述符指定的文件(需包含
<unistd.h>
)。 -
示例:
int fd = open("data.txt", O_WRONLY | O_CREAT, 0644); dprintf(fd, "PID: %d\n", getpid()); // 写入文件描述符对应的文件
4.sprintf()
-
作用:将格式化数据写入字符数组中。
-
风险:不检查缓冲区大小,可能导致溢出。
-
示例:
char buffer[20]; sprintf(buffer, "Result: %d", 100); // buffer内容:Result: 100
5.snprintf()
-
作用:安全版的
sprintf()
,指定缓冲区大小防止溢出。 -
示例:
char buffer[10]; snprintf(buffer, sizeof(buffer), "Number: %d", 12345); // buffer内容:Number: 1(因缓冲区不足被截断)
输入函数
-
1.scanf()
-
作用:从标准输入(stdin)读取格式化数据。
-
示例:
int age; printf("Enter your age: "); scanf("%d", &age); // 输入:25 → age = 25
2.
fscanf()
-
作用:从文件流中读取格式化数据。
-
示例:
FILE *file = fopen("data.txt", "r"); char name[20]; int id; fscanf(file, "%s %d", name, &id); // 从文件读取字符串和整数
3.sscanf()
-
作用:从字符串中解析格式化数据。
-
示例:
char input[] = "Date: 2023-10-05"; int year, month, day; sscanf(input, "Date: %d-%d-%d", &year, &month, &day); // 解析结果:year=2023, month=10, day=5