我还是新来的,但我遇到了质疑为什么我认为下面的事情无法完成。
我正在尝试将foobar分配给“Hello there!\ n”的值。要么无法完成,要么我很难搞清楚。
编辑:我需要澄清一下,我正在寻找下面的原因,而不是其中的一种解决方案可以解决问题。
编辑:我接受了“你不能以这种方式连接c中的字符串变量”的答案。大概是因为编写解析器以允许以下方式太难了。我太新了,不知道有什么不同,而且太新了,不太关心。如果有人发现引用的正式理由,请发布。
#include <stdio.h>
int main()
{
char *foo = "Hello";
char *bar = " there!\n";
const char *foobar = (*foo) *bar;
printf("%s", foobar);
return 0;
}
这似乎不应该是一个问题。
答案 0 :(得分:11)
你不能以这种方式在c中连接字符串变量。
您需要一个内存空间,您可以在其中复制该内存中的两个字符串。
如果您已经知道字符串的大小不能大于定义的大小,则内存空间可以是char foobar[100]
之类的静态缓冲区。或者,如果您不知道字符串的限制大小,则内存可能是dynamiuc缓冲区,如以下示例中所示
#include <stdio.h>
#include <string.h>
int main()
{
char *foo = "Hello";
char *bar = " there!\n";
char *foobar = malloc(strlen(foo) + strlen(bar) + 1);
strcpy(foobar,foo);
strcat(foobar,bar);
printf("%s", foobar);
return 0;
}
如果您使用malloc()
分配内存,那么不要忘记释放foobar
内存,因为它在您的程序中无效
free(foobar);
答案 1 :(得分:3)
在C语言中,字符串不能与您的方式连接在一起。模仿你正在尝试做的一种可能的方法是使用预处理器:
#include <stdio.h>
#define FOO "foo"
#define BAR "bar"
int main()
{
char *foo = FOO;
char *bar = BAR;
const char *foobar = FOO BAR;
printf("%s", foobar);
return 0;
}
答案 2 :(得分:2)
回答“编辑过的”问题:
它不起作用,因为C语言本身不知道如何连接字符串。您应该使用strcat
或其他一些功能。此外,编译器不知道将字符串放在内存中的位置,因此它不能使用“foo”和“bar”存储来存储结果字符串。
当然,在C中,代码中*foo
的含义是字母'H'
,*bar
变为' '
。因此(*foo) *bar
变为('H') ' '
,在C中绝对没有用处。
答案 3 :(得分:1)
你的代码可能没有任何问题编译,但有一些可能的错误。
前两个char *(或字符串)声明是合法的。 第三个不是那么多。 你将(* bar)转换为* foo,它不是数据类型而是变量,并且将foobar设置为foo的转换值,而不是进行字符串连接。
C不与运算符进行字符串连接。相反,您需要使用特定的库来连接字符串或创建自己的函数。对于字符串,您有string.h
对于这种特殊情况,你有strcat:它需要两个字符串并返回一个带有这两个字符串串联的新字符串。
所以,举个例子:
char *foo = "Hello";
char *bar = " there!\n";
const char *foobar = malloc((strlen(foo)+strlen(bar))*sizeof(char));
foobar = strcat(foo,bar);
像这样。
希望这有帮助。