'char x []'是什么意思?

时间:2010-11-16 15:45:48

标签: c++ c

我有这样的结构:

struct A 
{   
  char x[];
};

这是什么意思?当我做类似的事情时:

A a;
a.x = "hello";

gcc抛出错误说:

error: incompatible types in assignent of 'const char [6]' to 'char [0u]'

4 个答案:

答案 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");