用多行字符串写printf(@"")

时间:2014-09-13 22:34:12

标签: c printf codeblocks

是否可以写下这样的内容:

printf(@"

-
-
-
-
");

我可以在C#中完成,但不能在C中。它在CodeBlocks中给我一个错误。我被允许这样做吗?

错误讯息:错误:迷路' @'在计划中。

5 个答案:

答案 0 :(得分:2)

没有。该语法在C中不存在。

如果你想要一个多行字符串,把它写成多个双引号字符串,它们之间没有其他标记。他们将合并。

printf(
    "some string"
    "more of the string"
    "even more of the string"
);

(当然,如果您想要的话,您需要在每行的末尾添加\n。)

答案 1 :(得分:2)

不,这不是C理解的语法,C没有原始文字。 你可以使用\作为最后一个字符继续下一行:

   const char *str = "hello\n\
world";

此外,将连接连续的字符串文字。所以你可以这样做。

const char *str = "Hello\n"
"world\n";

答案 2 :(得分:2)

C中没有C#的逐字字符串。如果你有一些字符可以逃脱,比如"或\,用' \'来逃避它们,这种语言没有选项。

如果要在字符串文字中嵌入多行,可以在字符串中的适当位置插入\ n,或者也可以转义返回字符:

printf("Here's\
       a multiline\
       string litteral");

答案 3 :(得分:1)

在行尾用行\继续行。

printf("\
\
-\
-\
-\
-\
");

答案 4 :(得分:1)

C中的字符串文字可能不包含换行符。您有两种解决方法:

  1. 使用隐式字符串连接(由编译器完成)。

    printf("The quick brown"
           " fox jumps over"
           " the sleazy dog.");
    
  2. 通过在其前面放置反斜杠来转义换行符。

    printf("The quick brown\
     fox jumps over\
     the sleazy dog.");
    
  3. 就个人而言,我更喜欢第一种形式,因为第二种形式看起来很丑陋(我的观点),并迫使你破坏你的代码缩进。

    在任何一种情况下,字符串根本不包含换行符。因此,如果你真的想让他们在那里,你必须通过\n添加它们。