如何使用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