当与%*。s格式说明符一起使用时,sprintf写入空白字符串

时间:2014-11-21 06:14:45

标签: c printf format-specifiers

我有一个sprintf如下 -

sprintf (output,"%.*s%s%s%s",length,Str1,Str2,Str3,Str4);

所有字符串都包含有效数据,长度参数也是正确的。 然而,在这个sprintf之后,输出仍然很明显。

如果我用%s替换%。* s并删除长度参数,它就可以正常工作。

2 个答案:

答案 0 :(得分:1)

试试这个

更改

sprintf (output,"%*.s%s%s%s",length,Str1,Str2,Str3,Str4);

sprintf (output,"%.*s%s%s%s",length,Str1,Str2,Str3,Str4);
                  ^^

答案 1 :(得分:1)

输出任何内容的原因是因为如果省略点后面的尾随数字或星号,则精度为零。 %*.修改宽度而不是精度。相反,您需要%.*。请注意,这仅适用于它所属的转换说明符。即:

char output[100];
char str1[] = "hello";
char str2[] = "there";
int length = 4;

sprintf(output, "%.*s%s", length, str1, str2);
printf("%s", output);

输出:

hellthere