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); }
此代码连接str1
和str2
而不需要malloc
,输出应为:
foo bar foobar