如何在C源代码中存储段落?

时间:2012-10-15 07:49:48

标签: c perl

我是一名perl程序员并且惊讶地发现c语言没有方便存储段落的方式,例如:

       my $a = <<'dd';
          hello wolrd..
           1
            2
             3
       dd 

那我怎么在C中进行smiliary操作?

3 个答案:

答案 0 :(得分:5)

这样做:

char a[] = 
    "hello world\n"
    " 1\n"
    "  2\n"
    "   3\n";

答案 1 :(得分:5)

您的问题有两个不同的答案,它们提供了许多相同的功能。

两个

char *str="Line 1\nLine 2\nLine 3";

char str[]="Line 1\nLine 2\nLine 3";

允许您打印段落:

printf("%s",str);

但是,第一个声明(char *str)在通常只读的内存中创建一个字符串,而第二个声明允许在运行时编辑该字符串。这种描述很重要,但并不总是很清楚。有关详细信息,请参阅this question

字符\n是换行符,您应该检查以确保其行为符合您在目标平台上的预期。例如,在DOS上你可能需要使用`“\ r \ n”,这是回车+换行。 Wiki对此有an article

正如一位评论者指出的那样,这些形式的另一个不同之处在于*str作为指针而str[]不起作用。他们经常(但并非总是)具有相同的行为; this question有更多相关信息。

正如一些评论者指出的那样,某些编译器中字符串文字的长度有限制。 MSVC的限制为2048个字符(参见here),而某些帐户的GCC没有限制。 C90保证长度至少为509个单字节字符;这在C99中增加到4095。

无论如何,如果你想避免这个长度限制,或者你想以更漂亮的方式组织文本,你可以使用这种格式(注意必须明确使用换行符和引号,编译器将相邻的字符串视为连接):

char *str =
  "Line 1\n"
  "Line 2\n"
  "Line 3\n";

或者这个(行末尾的反斜杠转义你为格式化插入的换行符,如果你在这里缩进你的代码,它将成为字符串的一部分):

char *str =
"Line 1 \
Line 2 \
Line 3";

答案 2 :(得分:1)

你可以尝试

char *str = "hello world\n 1\n  2\n   3\n";