C字符串连接的常量

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

对于下面的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); 

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

 const char foo[] = "foo"; const char bar[] = "bar"; char foobar[] = foo bar; // look Ma, I did it without any operator! 

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

 int foo_str_len = sizeof(foobar)-1; 

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


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

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

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

(字符*)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 

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

C很难用于字符串,正如我们从这个例子中可以看到的那样。 尽管他们傲慢自信,但写作的人混淆了各种概念,仍然需要学习如何使用C.

这个答案看起来像有人设法将字符串文字与const字符串变量混合在一起。 我的猜测是原始的预处理器宏而不是变量。

 #include  #include  int main(int argc, char *argv[]) { char *str1 = "foo"; char *str2 = "bar"; char ccat[strlen(str1)+strlen(str2)+1]; strncpy(&ccat[0], str1, strlen(str1)); strncpy(&ccat[strlen(str1)], str2, strlen(str2)); ccat[strlen(str1)+strlen(str2)+1] = '\0'; puts(str1); puts(str2); puts(ccat); } 

此代码连接str1str2而不需要malloc ,输出应为:

 foo bar foobar