如何使用printf打印非空终止的string?
我怎么能打印一个非null终止的string使用printf,假设我知道在运行时string的长度?
printf("%.*s", length, string);
与其他参数一起使用:
printf("integer=%d, string=%.*s, number=%f", integer, length, string, number); // ^^^^ ^^^^^^^^^^^^^^
在C中,您可以指定以%.123s
格式输出的最大长度。 这意味着输出长度最多为123个字符。 123
可以replace为*
,所以长度将取自printf的参数,而不是硬编码。
请注意,这假定string
不包含任何内部空字节(\ 0),因为%.123s
仅限制最大长度不是确切的长度,并且string仍然被视为空终止。
如果要打印内部为空的非空终止的string,则不能使用单个printf。 改用fwrite
:
fwrite(string, 1, length, stdout);
详细解释请参阅@ MSDousti的答案 。
由@KennyTM提供的答案是伟大的,但有一个微妙的。
一般来说,如果string非空“终止”,但在中间有一个空字符, printf("%.*s", length, string);
不按预期工作。 这是因为%.*s
格式string要求printf
打印最大 length
字符,而不是length
字符。
我宁愿使用@William Pursell在OP下的评论中指出的更一般的解决scheme:
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