4

考虑这个代码段:

char message[255];
char newMessage[255];
int i;
for (i = 0 ; i < 255 ; i++)
     message[i] = i;
newMessage = message;

当我尝试这样做时,我在最后一行得到一个错误:

incompatible types when assigning to type ‘char[255]’ from type ‘char *

如果数组具有相同的类型,为什么我会得到它?我如何解决它?

提前致谢

4

5 回答 5

5

无法分配数组。您可以使用memcpy()将一个数组的内容复制到另一个数组。

于 2012-05-16T20:04:17.540 回答
4

解决此问题的一种方法是声明newMessage为指针:char* newMessage.

另一种方法是使用memcpy()-- 或者strncpy()ifmessage是一个字符串 -- 来复制messageinto的内容newMessage

哪种方法更可取取决于您使用newMessage.

于 2012-05-16T20:03:58.193 回答
2

尽管数组被声明为相同类型,但一旦您尝试使用一个,它就会变成指向其第一个元素的指针,因此您不能使用它来分配给另一个数组。

您可以使用显式复制数组,memcpy或者在数组是结构的一部分的情况下,它将被复制为结构的一部分。

于 2012-05-16T20:06:17.490 回答
2

您需要遍历其中的每个元素message并将值分配给newMessage. (或memcpy()按照其他人的建议使用。)

该错误仅在您尝试执行的操作的上下文中是偶然的。

于 2012-05-16T20:06:36.323 回答
0

您不能按照上述方式将数组的内容从一个数组复制到另一个数组。

int arr[2] 这是一个由 2 个整数组成的数组,arr[0]第一个整数arr[1]是第二个整数。但。arr是数组第零个元素的地址(不可变)。

因此,当您这样做时,您并newMessage = message;没有复制数组中的元素,而是复制message. 这是非法的,因为数组是指向内存的常量指针。你不能改变它。

因为它是一个字符数组。用于复制使用strcpystrncpy查看手册页以获取两者的描述:)

于 2012-05-20T15:50:44.320 回答