【问题标题】:sprintf writing a blank string when used with %*.s format specifiersprintf 与 %*.s 格式说明符一起使用时写入空白字符串
【发布时间】:2026-02-14 21:20:04
【问题描述】:

我有一个如下的 sprintf -

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

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

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

【问题讨论】:

  • 事实上 %.*s 不起作用。我现在在问题中更正了它。我的错。
  • 发布一个竞争示例。

标签: c printf format-specifiers


【解决方案1】:

试试这个

改变

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

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

【讨论】:

    【解决方案2】:

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

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

    输出:

    hellthere
    

    【讨论】: