内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用
假设我在运行时知道字符串的长度,如何使用printf打印非空终止字符串?
一般来说,如果字符串是非空的“终止”,但在中间有一个空字符,printf("%.*s", length, string);
不能按预期工作。这是因为%.*s
格式字符串要求printf
打印最多的length
字符,而不是确切的 length
字符。
我宁愿使用
fwrite(string, sizeof(char), length, stdout);
这是一个示例代码:
#include <stdio.h>
int main(void) {
size_t length = 5;
char string[length];
string[0] = 'A';
string[1] = 'B';
string[2] = 0; // null character in the middle
string[3] = 'C';
string[4] = 'D';
printf("With printf: %.*s\n", length, string);
printf("With fwrite: ");
fwrite(string, sizeof(char), length, stdout);
printf("\n");
return 0;
}
输出:
With printf: AB
With fwrite: AB CD