【问题标题】:sprintf write to string with \n [closed]sprintf 用 \n 写入字符串 [关闭]
【发布时间】:2011-11-17 14:16:44
【问题描述】:

我有这个代码:

str1= "a";
str2= "b";
sprintf(string, "0 %s %s\n", str1, str2);

字符串然后包含:

“0 a b”

而不是(我想要的):

"0 a b
"

我该如何解决?

注意:我将 var 字符串的引用放在 " 中,以便您了解情况。

编辑:

问题解决了 我在尺寸上加了 1,它就起作用了。我不完全明白为什么,但它已经解决了

【问题讨论】:

  • 你怎么知道那个字符串不正确?尝试打印它或在调试器中查看它的所有字符。
  • 您的string 将在其末尾添加一个换行符(您如何发现它没有?)。确保string 足够大以容纳结果。
  • strsize = (2 + 1 + 1 + 1 + 2 + 1) * sizeof(char);
  • 发布一个完整的例子来展示这个问题。您显示的代码是正确的。
  • 如果您发布了整个示例,我们可以告诉您原因。

标签: c linux printf


【解决方案1】:

如果您使用的是 Windows 计算机,您可能需要 \r\n 而不仅仅是换行符。图书馆应该会处理它。

【讨论】:

  • 不过,它在 linux 中。 (我会把它添加到标签中)
【解决方案2】:

看起来它对我有用。我在字符串周围加上括号[] 来证明这一点。

看看这里:http://ideone.com/3rbwF

【讨论】:

    【解决方案3】:

    string分配足够的空间

    #include <stdio.h>
    #include <stdarg.h>
    
    main() {
        char string[7];
        char str1[] = "a";
        char str2[] = "b";
        sprintf(string, "0 %s %s\n", str1, str2);
        printf("%s", string);
    }
    

    【讨论】:

    • 在这种情况下,它将是:char string[8];而不是你展示的。在您显示的内容中,未分配 \0 的空间
    • @brunoais 是的。 "0 a b\n" 占用 7 个字符。 (换行符在源代码中被转义,在编译后的代码中它只占用 1 个字符)
    • Ups,我算错了字符数。他是对的。
    【解决方案4】:

    听起来你想要的是sprintf(string, "0 %s %s\n\n", str1, str2);

    在您的示例中,字符串实际上包含“0 a b\n”,这意味着在\n 之后打印的任何内容都将出现在下一行。如果你想在它下面有一个空行,你需要另一个换行符。

    【讨论】:

    • 不起作用。 \n 不在字符串内。我用 printf 来测试它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多