假设有以下代码:
struct c {
char* name;
};
int main(int argc, char *argv[]) {
struct c c1;
c1.name = "Ana";
printf ("%s\n",c1.name);
return 0;
}
我的第一反应是认为我需要分配一些空间,可以在堆上分配,也可以通过显式的char name[] = "Anna"
来分配,但是我上面的例子可以工作。编译器只是将该字符串存储在数据段中并指向它吗?换句话说,这就像做了一个
struct c {
char* name = "Ana";
};
char name[] = "Anna";
只能用于初始化,而不能在后面进行赋值。struct a { char b[10]; };
不需要手动分配b
字段的内存,但也不允许使用struct a c; c.b = "Anna";
。相反,您需要使用strcpy
、strncpy
、strcat
等函数。 - Chris