C字符串连接的常量

Fra*_*lea 21 c string-concatenation

答案之一,以你为什么不使用C为您的Web应用程序?包含以下内容:

对于下面的C crap示例:

const char* foo = "foo";
const char* bar = "bar";
char* foobar = (char*)malloc(strlen(foo)+strlen(bar)+1);
strcpy(foobar, foo);
strcat(foobar, foo);
Run Code Online (Sandbox Code Playgroud)

实际上,常量CAN和应该在C中自然连接:

const char foo[] = "foo";
const char bar[] = "bar";
char foobar[] = foo bar; // look Ma, I did it without any operator!
Run Code Online (Sandbox Code Playgroud)

使用[]代替*甚至可以让你修改字符串,或者找到它们的长度:

int foo_str_len = sizeof(foobar)-1;
Run Code Online (Sandbox Code Playgroud)

所以,请你,在你(错误地)声称C很难用字符串之前,学习如何使用C.


我自己尝试过,但得到一个错误:

预期','或';' 字符串常量之前

所以我的问题是:我是否需要告诉编译器一些东西才能使这项工作或上面的帖子完全错误?请注意,我知道在C中连接字符数组的其他方法.

Lun*_*din 39

(字符*)malloc的

永远不要在C中对malloc的结果进行类型转换.阅读本文此内容.

实际上,常量CAN和应该在C中自然地连接起来

不,字符串文字可以而且应该在C中连接"foo"是一个字符串文字,const char foo[]是一个常量字符串(字符数组).代码"foo" "bar"将自动连接,代码foo bar不会.

如果需要,可以隐藏宏后面的字符串文字:

#define foo "foo"
#define bar "bar"
char foobar[] = foo bar; // actually works
Run Code Online (Sandbox Code Playgroud)

所以,请你,在你(错误地)声称C很难用字符串之前,学习如何使用C.

Ç 相当困难的用绳子用,因为我们可以从这个例子很看.尽管他们有着傲慢的自信,写下来的人混淆了各种概念,仍然需要学习如何使用C.

  • @AlexejMagura char *不是字符串文字,所以不可以。 (2认同)

gee*_*aur 7

这个答案看起来像有人设法将字符串文字与const字符串变量混合在一起,这种文字可以用这种方式连接起来.我的猜测是原来有预处理器宏而不是变量.