2011-01-22 142 views
1

可能重複:
string literal in c
Assigning strings to arrays of charactersC字符串數組

我得到了下面的代碼:

char result[3][4]; 

result[0] = "horse"; 
result[1] = "pig"; 
result[2] = "chicken"; 

它不會編譯說Incompatible types in assignment。我究竟做錯了什麼?

+0

那麼這些都是char *而不是char [4] ... – leppie 2011-01-22 18:38:27

+0

@birryree:那個問題有自己可能的重複http://stackoverflow.com/questions/579734/assigning-strings-to-arrays-of-字符 – 2011-01-22 19:42:54

回答

4

char是單個字符,例如'h'

你想要的是字符串指針。

char *result[3]; 

記住,如果你做這種方式,您將無法更改單個字符串的內容(這是一個常數,並存儲在不同的地方。)

你也可以這樣做這樣

char *result[3]; 

result[0] = malloc(100 * sizeof(char)); 
strcpy(result[0],"horse"); // or strncpy(result[0],5,"horse") 
etc 
+0

在OP的例子中`result`是一個`char [3] [4]`,而result [i]`因此是`char [4]`而不是`char`。 – peoro 2011-01-22 18:40:39

1

你可能想:

char* result[3]; 
result[0] = "horse"; 
result[1] = "pig"; 
result[2] = "chicken"; 

你做錯了兩個什麼原因。

首先,你不能「指定」的字符串的字符數組一樣,你不得不使用,例如,strcpy

其次,你的陣列尺寸也錯了,char array[4]顯然不會持有"horse""chicken",所以如果你糾正我上述所說的(這將編譯它甚至不會工作,但你會寫信給你的內存不應該寫入)。

更正後的代碼所做的是不是存儲char數組本身,而是存儲指向內存中存儲位置的指針,其中"horse"等等。因此,它只存儲一個地址,然後您可以使用=運算符。

1

數組是不可修改的lvalues即不能分配給他們。

您需要使用指針數組。更改char result[3][4];

-1

你要增加的話,大小,並用strcpy()

char result[3][8]; // at least 8! 

strcpy(result[0], "horse"); 
strcpy(result[1], "pig"); 
strcpy(result[2], "chicken"); 
2
char result[3][10] = { 
    "horse", 
    "pig", 
    "chicken", 
} 

char result[3][10]; 

strcpy_s(result[0], 10, "horse"); 
strcpy_s(result[1], 10, "pig"); 
strcpy_s(result[2], 10, "chicken"); 
0

您可以指定一個字符串(如:"horse")只有當你聲明它時,纔會到char數組。

char array[4] = "str"; // is OK 
char array2[4]; 
array2 = "str"; // is NOT OK. 

你可以這樣做:

char result[3][4] = { "horse", "pig", "chicken" }; 

但警告:"horse""chicken"char[4]更長。


如果你想分配一個字符串到一個已經宣佈char數組,你將不得不使用strcpy(或其他類似的功能)。


另一種解決方案,許多建議是聲明result爲char指針數組:char *result[3];,但如果你不喜歡這個,你將不會被允許修改由result[i]指向的字符串的內容。

1

以下作品更好: 炭結果[3] [10] = { 「馬」, 「豬」, 「雞肉」};

此外,具有記住,「雞」,「馬」具有多於4個字符,並因此導致[3] [4](在[4]的部分)不是正確的。

1

這不會起作用,因爲聲明爲char result[3][4]result並用作result[0]會導致類似東西char * const result。常量指針不允許任何賦值,它已經包含指向「[4]」列的數組的指針。