我是一名perl程序员并且惊讶地发现c语言没有方便存储段落的方式,例如:
my $a = <<'dd';
hello wolrd..
1
2
3
dd
那我怎么在C中进行smiliary操作?
答案 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";