可能重复:
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
。我究竟做错了什么?
可能重复:
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
。我究竟做错了什么?
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
在OP的例子中`result`是一个`char [3] [4]`,而result [i]`因此是`char [4]`而不是`char`。 – peoro 2011-01-22 18:40:39
你可能想:
char* result[3];
result[0] = "horse";
result[1] = "pig";
result[2] = "chicken";
你做错了两个什么原因。
首先,你不能“指定”的字符串的字符数组一样,你不得不使用,例如,strcpy
。
其次,你的阵列尺寸也错了,char array[4]
显然不会持有"horse"
或"chicken"
,所以如果你纠正我上述所说的(这将编译它甚至不会工作,但你会写信给你的内存不应该写入)。
更正后的代码所做的是不是存储char数组本身,而是存储指向内存中存储位置的指针,其中"horse"
等等。因此,它只存储一个地址,然后您可以使用=
运算符。
数组是不可修改的lvalues
即不能分配给他们。
您需要使用指针数组。更改char result[3][4];
到
你要增加的话,大小,并用strcpy()
:
char result[3][8]; // at least 8!
strcpy(result[0], "horse");
strcpy(result[1], "pig");
strcpy(result[2], "chicken");
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");
您可以指定一个字符串(如:"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]
指向的字符串的内容。
以下作品更好: 炭结果[3] [10] = { “马”, “猪”, “鸡肉”};
此外,具有记住,“鸡”,“马”具有多于4个字符,并因此导致[3] [4](在[4]的部分)不是正确的。
这不会起作用,因为声明为char result[3][4]
result
并用作result[0]
会导致类似东西:char * const result
。常量指针不允许任何赋值,它已经包含指向“[4]
”列的数组的指针。
那么这些都是char *而不是char [4] ... – leppie 2011-01-22 18:38:27
@birryree:那个问题有自己可能的重复http://stackoverflow.com/questions/579734/assigning-strings-to-arrays-of-字符 – 2011-01-22 19:42:54