在多行上定义一个字符串

时间:2012-10-02 17:01:15

标签: 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);

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

示例:

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

产生的输出为:

Buffer:This Is The        Longest String In the World       that in text goes on and..

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

3 个答案:

答案 0 :(得分:20)

新行继续考虑代码中的任何空格。

您可以利用字符串文字串联来提高可读性:

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

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

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

答案 1 :(得分: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);

答案 2 :(得分:4)

这也会起作用:

char buffer[512];
sprintf(&buffer[0], "This is the longest string"
        "in the world that in text"
        "goes on and on and on and on ....");
printf("%s\n", buffer);