C - sprintf 在与 %*.s 格式说明符一起使用时写入空白字符串



我有一个冲刺如下 -

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

所有字符串都包含有效数据,并且长度参数也是正确的。然而,在此冲刺之后,输出仍然不稳定。

如果我用 %s 替换 %.* 并删除长度参数,它工作得很好。

试试这个

改变

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

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

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

char output[100];
char str1[] = "hello";
char str2[] = "there";
int length = 4;
sprintf(output, "%.*s%s", length, str1, str2);
printf("%s", output);

输出:

hellthere

最新更新