我有这样的结构:
struct A
{
char x[];
};
这是什么意思?当我做类似的事情时:
A a;
a.x = "hello";
gcc抛出错误说:
error: incompatible types in assignent of 'const char [6]' to 'char [0u]'
答案 0 :(得分:10)
这是一个C99“灵活的阵列成员”。 有关gcc的详细信息,请参阅此处:http://www.delorie.com/gnu/docs/gcc/gcc_42.html
答案 1 :(得分:2)
首先,在C ++中,您不能拥有未指定大小的数组。此外,如果要为它们分配字符串文字,则应使用指针而不是数组:
struct A
{
char* x;
};
答案 2 :(得分:2)
此结构具有C99 灵活数组成员。因此,声明struct A
类型的变量是无效的,但您可以声明类型为struct A *
的变量(指向struct A
的指针)并使用malloc
为其获取内存:
struct A *a = malloc(sizeof *a + strlen(mystring) + 1);
strcpy(a->x, mystring);
答案 3 :(得分:-1)
char x []可以读作“x是指向我们尚未分配必要内存的char数组的指针”。但是,您必须指定一个大小(char x [6])或将其声明为指针(char * x)
a.x =“hello”不起作用,因为a.x没有指向您可以分配的任何内存空间。另外,编译器抱怨将一些应该是常量的东西(字符串)分配给可以由程序改变的东西。
您必须声明x常量或使用strcpy等函数手动复制字符串。
例如:
struct A
{
char *x;
};
A a;
a.x = new char[6];
strcpy(a.x, "Hello");