在多行上定义一个字符串

Nan*_*urf 13 c syntax

请采取以下措施:

char buffer[512];

memset(buffer, 0, sizeof(buffer));
sprintf(&buffer[0],"This Is The Longest String In the World that in text goes on and..");

printf("Buffer:%s\r\n",buffer);
Run Code Online (Sandbox Code Playgroud)

我希望能够在多行上创建此字符串,以便于故障排除和编辑.但是,当我使用\命令时,我的输出被看似是标签的东西分开了?

例:

sprintf(&buffer[0],"This Is The\
    Longest String In the World\
    that in text goes on and..");
Run Code Online (Sandbox Code Playgroud)

产生一个输出:

Buffer:This Is The        Longest String In the World       that in text goes on and..
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?这只是一种尝试在多行代码中分解字符串的错误方法吗?

pb2*_*b2q 20

换行符继续考虑代码中的任何空格.

您可以利用字符串文字串联来获得更好的可读性:

sprintf(buffer, "This Is The "
                "Longest String In the World "
                "that in text goes on and..");
Run Code Online (Sandbox Code Playgroud)

使用\你需要在第0列开始你的字符串的继续:

sprintf(buffer, "This Is The \
Longest String In the World \
that in text goes on and..");
Run Code Online (Sandbox Code Playgroud)

  • 额头被拍了一下。自动标签已经让我成功了!感谢您指出这一点,这确实是问题所在。 (2认同)

Jos*_*sey 8

虽然这可能看起来很迂腐,但我在现实世界中已被咬了足够多次,以便在其他两个答案中遇到以下问题.

  • 两个发布的答案忽略了在连接单独的字符串文字的单词之间给出空格(显然,在第一次测试之后).

  • 如果您的字符串非常长,请使用snprintf()- 它稍微笨拙,但它告诉任何人检查您的代码,您知道代码维护中的常见危险.

  • 如果您的字符串恰好包含%,您将收到编译器警告(好)或随机分段错误(错误).所以使用"%s"或者,或许在这种情况下,只是strcpy().(在两个月的时间内,同事可以轻松地添加99.9%到消息中.)

  • memset(),我经常看到的用途就是货物编程.是的,在特殊情况下需要它,但是一直使用它会发送错误信息.

  • 最后,为什么会有人使用&buffer[0]时只是buffer 会做什么?

总而言之,您的代码应该是:

char buffer[512];
snprintf(buffer, sizeof buffer, "%s", 
   "This is The Longest String "
   "In the World that in text "
   "goes on and on and on and on ....");
printf("Buffer:%s\r\n", buffer);
Run Code Online (Sandbox Code Playgroud)

  • 同意前4点,但我认为`&x [0]`不是一个缺陷,它清楚地说明了发生了什么. (2认同)