2010-11-16 123 views
0

我有這樣的結構:'char x []'是什麼意思?

struct A 
{ 
    char x[]; 
}; 

是什麼意思?當我這樣做:

A a; 
a.x = "hello"; 

GCC拋出一個錯誤說:

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

這似乎是C++。所提供的例子不會編譯爲C,因爲在這一點上沒有定義一個普通的'A'(定義了'struct A')。 'c'標籤被移除。 – pmg 2010-11-16 15:55:31

+0

@pmg提供的示例也不會像C++那樣編譯。 'test.cc:3:16:錯誤:ISO C++禁止使用零大小的數組'''''' – Cubbi 2010-11-16 15:57:02

+0

@pmg:是不是沒有編譯問題原因的代碼? – 2010-11-16 15:57:41

回答

2

首先,在C++中,不能有一個未指定大小的數組。此外,你應該使用指針,而不是一個數組,如果你想分配給他們的字符串文字:

struct A 
{ 
    char* x; 
}; 
+1

對於downvoter,問題標記爲「C++」,我只是忘了說適用於C++。我不知道C99。 – AraK 2010-11-16 15:50:34

+0

你的答案對於C++是正確的,但C(C99)是錯誤的。 (雖然我不是downvoter) – 2010-11-16 16:23:19

-1

焦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"); 
+0

哎呀,不知道在C中允許使用char x []。 – 2010-11-16 16:00:59

+0

這不能編譯:'char *'賦值給'char [0u]'的不兼容類型' 。這是因爲'char x []'是一個數組;你不能指定它的指針。 – 2010-11-16 16:09:24

2

這種結構具有C99 柔性陣列構件。因此它是無效的聲明struct A類型的變量,但可以聲明struct A *類型的變量(指針struct A),並使用malloc以獲得存儲器它爲:

struct A *a = malloc(sizeof *a + strlen(mystring) + 1); 
strcpy(a->x, mystring);