我是一名 perl 程序员,惊讶地发现 c 语言没有方便的方法来存储段落,例如:
my $a = <<'dd';
hello wolrd..
1
2
3
dd
那么我如何在 C 中进行 smilary 操作呢?
您的问题有两个不同的答案,它们提供了许多相同的功能。
两个都
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";
它是这样完成的:
char a[] =
"hello world\n"
" 1\n"
" 2\n"
" 3\n";
你可以试试
char *str = "hello world\n 1\n 2\n 3\n";