2011-01-22 103 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]”列的数组的指针。