我有這樣的結構:'char x []'是什麼意思?
struct A
{
char x[];
};
是什麼意思?當我這樣做:
A a;
a.x = "hello";
GCC拋出一個錯誤說:
error: incompatible types in assignent of 'const char [6]' to 'char [0u]'
我有這樣的結構:'char x []'是什麼意思?
struct A
{
char x[];
};
是什麼意思?當我這樣做:
A a;
a.x = "hello";
GCC拋出一個錯誤說:
error: incompatible types in assignent of 'const char [6]' to 'char [0u]'
這是C99 「柔性數組成員」。 請參閱此處瞭解gcc的具體信息:http://www.delorie.com/gnu/docs/gcc/gcc_42.html
也許有用的是要注意,這是C++中的錯誤(問題標記爲兩種語言) – Cubbi 2010-11-16 15:53:41
首先,在C++中,不能有一個未指定大小的數組。此外,你應該使用指針,而不是一個數組,如果你想分配給他們的字符串文字:
struct A
{
char* x;
};
對於downvoter,問題標記爲「C++」,我只是忘了說適用於C++。我不知道C99。 – AraK 2010-11-16 15:50:34
你的答案對於C++是正確的,但C(C99)是錯誤的。 (雖然我不是downvoter) – 2010-11-16 16:23:19
焦X []可以讀作「x是一個指向char類型的數組,我們有尚未分配必要的記憶「。但是你必須指定一個容器大小(char x [6])或者將其聲明爲一個指針(char * x)
ax =「hello」不起作用,因爲ax不指向任何內存空間已分配。此外,編譯器會抱怨將某些假定爲常量的東西(字符串)分配給程序可能更改的內容。
您必須聲明x常量或使用諸如strcpy之類的函數手動複製字符串。
例如:
struct A
{
char *x;
};
A a;
a.x = new char[6];
strcpy(a.x, "Hello");
哎呀,不知道在C中允許使用char x []。 – 2010-11-16 16:00:59
這不能編譯:'char *'賦值給'char [0u]'的不兼容類型' 。這是因爲'char x []'是一個數組;你不能指定它的指針。 – 2010-11-16 16:09:24
這種結構具有C99 柔性陣列構件。因此它是無效的聲明struct A
類型的變量,但可以聲明struct A *
類型的變量(指針struct A
),並使用malloc
以獲得存儲器它爲:
struct A *a = malloc(sizeof *a + strlen(mystring) + 1);
strcpy(a->x, mystring);
這似乎是C++。所提供的例子不會編譯爲C,因爲在這一點上沒有定義一個普通的'A'(定義了'struct A')。 'c'標籤被移除。 – pmg 2010-11-16 15:55:31
@pmg提供的示例也不會像C++那樣編譯。 'test.cc:3:16:錯誤:ISO C++禁止使用零大小的數組'''''' – Cubbi 2010-11-16 15:57:02
@pmg:是不是沒有編譯問題原因的代碼? – 2010-11-16 15:57:41