Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C sprintf写入字符串时使用\n_C_Linux_Printf - Fatal编程技术网

C sprintf写入字符串时使用\n

C sprintf写入字符串时使用\n,c,linux,printf,C,Linux,Printf,我有以下代码: str1= "a"; str2= "b"; sprintf(string, "0 %s %s\n", str1, str2); 字符串则包含: "0 a b" “0 a b” 而不是(我想要的): “0 a b " 我怎样才能解决这个问题 注意:我将var字符串的引号放在“以便您能够理解情况”。 编辑: 问题解决了,我在大小上加了1,效果很好。我不完全明白为什么,但问题解决了听起来你想要的是sprintf(字符串,“0%s%s\n\n”,str1,str2); 在您的示例中

我有以下代码:

str1= "a";
str2= "b";
sprintf(string, "0 %s %s\n", str1, str2);
字符串则包含:

"0 a b" “0 a b” 而不是(我想要的):

“0 a b " 我怎样才能解决这个问题

注意:我将var字符串的引号放在“以便您能够理解情况”。

编辑:


问题解决了,我在大小上加了1,效果很好。我不完全明白为什么,但问题解决了听起来你想要的是
sprintf(字符串,“0%s%s\n\n”,str1,str2);


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

如果您在Windows计算机上,则可能需要
\r\n
而不仅仅是换行符。库应该处理它。

字符串分配足够的空间

#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);
}
#包括
#包括
main(){
字符串[7];
字符str1[]=“a”;
字符str2[]=“b”;
sprintf(字符串,“0%s%s\n”,str1,str2);
printf(“%s”,字符串);
}

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


请看这里:

您如何知道字符串不正确?尝试打印它或在调试器中查看它的所有字符。您的
字符串
将以换行符结尾(您如何发现它没有?)。确保
string
足够大,可以容纳结果。strsize=(2+1+1+1+2+1)*sizeof(char);发布一个完整的例子来演示这个问题。您显示的代码是正确的。如果您发布了整个示例,我们可以告诉您为什么。不起作用。字符串\n不在字符串内。我用printf来测试它,不过它是在linux中。(我将把它添加到标记中)在这种情况下,它将是:charstring[8];而不是你所展示的。在您显示的内容中,\0的空间不可用alloced@brunoais是的。“0 a b\n”占用7个字符。(换行符在源代码中转义,在编译代码中它只占用1个字符)Ups,我计算错了字符数。他是对的。
#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);
}