ken*_*ytm 102
printf("%.*s", length, string);
Run Code Online (Sandbox Code Playgroud)
与其他args一起使用:
printf("integer=%d, string=%.*s, number=%f", integer, length, string, number);
// ^^^^ ^^^^^^^^^^^^^^
Run Code Online (Sandbox Code Playgroud)
在C中,您可以使用%.123s格式指定要输出的最大长度.这意味着输出长度最多为123个字符.所述123可以被替代*,从而使长度将从printf的的参数,而不是硬编码要采取.
请注意,这假设string不包含任何内部空字节(\ 0),因为%.123s只限制最大长度而不是精确长度,并且字符串仍被视为以null结尾.
如果要打印内部为null的非空终止字符串,则不能使用单个printf.fwrite改为使用:
fwrite(string, 1, length, stdout);
Run Code Online (Sandbox Code Playgroud)
有关详细说明,请参阅@ MSDousti的答案.
M.S*_*sti 19
@KennyTM提供的答案很棒,但有一点微妙.
通常,如果字符串非空"已终止",但在中间具有空字符,printf("%.*s", length, string);则无法按预期工作.这是因为%.*s格式字符串要求printf打印最大的length人物,不准确 length的字符.
我宁愿使用@William Pursell在OP下的评论中指出的更一般的解决方案:
fwrite(string, sizeof(char), length, stdout);
Run Code Online (Sandbox Code Playgroud)
这是一个示例代码:
#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;
}
Run Code Online (Sandbox Code Playgroud)
输出:
With printf: AB
With fwrite: AB CD
Run Code Online (Sandbox Code Playgroud)