C 语言中常用的输出函数主要包含以下几类,分别用于不同的输出场景:
printf
—— 标准输出到屏幕int printf(const char *format, ...);
参数:
format
:格式控制字符串。...
:可变参数,根据格式控制字符串中的格式说明符提供相应的数据。返回值:
成功时返回输出的字符总数;失败时返回负值。
格式符 | 说明 | 示例输出 |
---|---|---|
%d |
有符号十进制整数 | printf("%d", -10); → -10 |
%u |
无符号十进制整数 | printf("%u", 10); → 10 |
%f |
浮点数(小数) | printf("%f", 3.14); → 3.140000 |
%.nf |
保留 n 位小数的浮点数 | printf("%.2f", 3.1415); → 3.14 |
%c |
单个字符 | printf("%c", 'A'); → A |
%s |
字符串 | printf("%s", "Hello"); → Hello |
%x |
无符号十六进制(小写) | printf("%x", 255); → ff |
%X |
无符号十六进制(大写) | printf("%X", 255); → FF |
%o |
八进制 | printf("%o", 10); → 12 |
%p |
指针地址 | printf("%p", ptr); → 0x7ffee4c7a8 |
%% |
输出一个 % 字符 |
printf("%%"); → % |
宽度:指定最小输出宽度(不足时填充空格)
printf("%5d", 42); // 输出: " 42"
printf("%-5d", 42); // 输出: "42 "(左对齐)
填充字符:用 0
填充
printf("%05d", 42); // 输出: "00042"
精度控制:用于浮点数和字符串
printf("%.2f", 3.14159); // 输出: "3.14"
printf("%.3s", "Hello"); // 输出: "Hel"
组合使用:
printf("%8.2f", 3.14159); // 输出: " 3.14"(宽度 8,精度 2)
printf("%-8.2f", 3.14159); // 输出: "3.14 "(左对齐)
#include
int main() {
int num = 42;
float pi = 3.14159;
char ch = 'A';
char *str = "Hello";
printf("整数: %d\n", num); // 输出: 整数: 42
printf("浮点数: %.2f\n", pi); // 输出: 浮点数: 3.14
printf("字符: %c\n", ch); // 输出: 字符: A
printf("字符串: %s\n", str); // 输出: 字符串: Hello
printf("十六进制: 0x%x\n", num); // 输出: 十六进制: 0x2a
printf("指针地址: %p\n", &num); // 输出: 指针地址: 0x...
return 0;
}
printf
不检查字符串格式,使用不当可能导致漏洞(如格式化字符串漏洞)。printf
不会自动换行,需手动加 \n
。fprintf
—— 输出到指定文件流int fprintf(FILE *stream, const char *format, ...);
将格式化数据输出到指定的文件流(如文件或标准错误)。
FILE *fp = fopen("log.txt", "w");
fprintf(fp, "Error code: %d\n", 404);
fclose(fp);
效果:在 log.txt
文件中写入 Error code: 404
sprintf
—— 格式化输出到字符串int sprintf(char *str, const char *format, ...);
将格式化的数据输出到字符串中。
char buffer[50];
sprintf(buffer, "Pi is approximately %.2f", 3.14159);
printf("%s\n", buffer);
输出:Pi is approximately 3.14
⚠️ 注意:sprintf
不安全,推荐使用 snprintf
。
snprintf
—— 安全的格式化输出到字符串int snprintf(char *str, size_t size, const char *format, ...);
防止缓冲区溢出,限制输出字符的长度。
char buffer[10];
snprintf(buffer, sizeof(buffer), "Number: %d", 123456);
printf("%s\n", buffer);
输出:Number: 1
(被截断)
puts
—— 简单输出字符串(自动换行)int puts(const char *str);
输出字符串并自动在末尾添加换行符。
puts("Hello, World!");
输出:Hello, World!
(自动换行)
putchar
—— 输出单个字符int putchar(int char);
向标准输出打印一个字符。
putchar('A');
putchar('\n');
输出:A
fputs
—— 输出字符串到指定文件流int fputs(const char *str, FILE *stream);
将字符串输出到指定文件流,不自动换行。
FILE *fp = fopen("data.txt", "w"); fputs("Data saved.\n", fp); fclose(fp);
putw
—— 向文件写入整数(已过时)int putw(int w, FILE *stream);
将整数写入文件,不推荐使用,多用 fwrite
替代。
函数 | 用途 |
---|---|
printf |
输出到屏幕 |
fprintf |
输出到文件或其他流 |
sprintf |
输出到字符串(不安全) |
snprintf |
输出到字符串(推荐) |
puts |
输出字符串(自动换行) |
putchar |
输出单个字符 |
fputs |
输出字符串到指定流(不换行) |