我有一个sprintf如下 -
sprintf (output,"%.*s%s%s%s",length,Str1,Str2,Str3,Str4);
所有字符串都包含有效数据,长度参数也是正确的。 然而,在这个sprintf之后,输出仍然很明显。
如果我用%s替换%。* s并删除长度参数,它就可以正常工作。
答案 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