2

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

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

那么我如何在 C 中进行 smilary 操作呢?

4

3 回答 3

5

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

两个都

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

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

允许您这样打印段落:

printf("%s",str);

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

该字符\n是换行符,您应该检查以确保它的行为方式符合您在目标平台上的预期方式。例如,在 DOS 上,您可能需要使用 `"\r\n",即回车 + 换行。Wiki 上有一篇关于此的文章。

正如一位评论者指出的那样,这些形式的另一个区别是,它*str可以用作指针,而str[]不能。他们经常(但并非总是)具有相同的行为;这个问题有更多关于这个的信息。

正如一些评论者所指出的,在一些编译器中,字符串文字的长度是有限制的。MSVC 有 2048 个字符的限制(请参阅此处),而 GCC 则没有限制,根据某些帐户。C90 保证至少 509 个单字节字符的长度;在 C99 中增加到 4095。

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

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

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

char *str =
"Line 1 \
Line 2 \
Line 3";
于 2012-10-15T07:59:58.650 回答
5

它是这样完成的:

char a[] = 
    "hello world\n"
    " 1\n"
    "  2\n"
    "   3\n";
于 2012-10-15T07:52:48.883 回答
1

你可以试试

char *str = "hello world\n 1\n  2\n   3\n";
于 2012-10-15T07:56:06.403 回答