在C中将数组分配给另一个数组时出错

时间:2012-05-16 20:02:46

标签: c pointers

考虑以下代码段:

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 *

如果数组具有相同的类型,为什么我会这样做?我该如何解决?

提前致谢

5 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:4)

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

另一种方法是使用memcpy() - 或strncpy()如果message是字符串 - 将message的内容复制到newMessage

哪种方法更可取决于您使用newMessage执行的操作。

答案 2 :(得分:2)

虽然数组被声明为相同的类型,但只要您尝试使用它就会变成指向其第一个元素的指针,因此您无法将其指定给另一个数组。

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

答案 3 :(得分:2)

您需要遍历message中的每个元素,并将值分配给newMessage。 (或者像其他人建议的那样使用memcpy()。)

错误只是在你想要做的事情的背景下偶然发生。

答案 4 :(得分:0)

你不能像上面那样将数组的内容从一个数组复制到另一个数组。

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

所以当你newMessage = message;时,你没有复制数组中的元素而不是message中的地址。这是非法的,因为数组是指向内存的常量指针。你无法改变它。

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