C中将一个数组赋值给另一个数组时出错

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 *

为什么数组类型相同还是会出现这种情况?该如何解决?
提前致谢。

newMessage = message; //newMessage指向第二个数组,在这行代码执行后,message和newMessage都应该指向同一个第一个数组。 - Samy Arous
如果你想要一个独立的数组副本,可以使用memcpy()或者逐个复制数组元素。 - trutheality
1
@lcfseth 主要的问题在于数组变量就像一个指针,其指向的地址是无法更改的。因此会出现错误。 - trutheality
@trutheality 对的,但即使你可以,这也不会让他有任何进展 :) 他只会失去对第二个数组的引用。考虑使用指针的相同示例。它仍然不起作用。 - Samy Arous
5个回答

5

无法直接赋值数组。您可以使用memcpy()将一个数组的内容复制到另一个数组。


4

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

另一种方法是使用memcpy()-- 如果message是一个字符串,那么可以使用strncpy()来将message的内容复制到newMessage中。

哪种方法更好取决于您接下来对newMessage的操作。


我不确定在我的情况下是否允许更改newMessage的类型。还有其他方法吗? - MichBoy
newMessage已经是一个指针。char * newMessage和char newMessage[]是等价的。后者在内存中创建数组。 - Samy Arous
1
@lcfseth:它们不是等价的。请参见常见问题解答:http://c-faq.com/aryptr/aryptr2.html - NPE

2
尽管数组被声明为相同类型,但一旦您尝试使用其中一个,它就会变成指向其第一个元素的指针,因此您无法将其用于分配给另一个数组。您可以使用“memcpy”显式地复制数组,或者在数组是结构的一部分时,它将作为结构的一部分被复制。

2
你需要循环遍历message中的每个元素,并将其值赋给newMessage。(或者像其他人建议的那样使用memcpy()。)
在你尝试做的事情的背景下,错误只是次要的。

0

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

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

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

由于这是一个字符数组,如果要复制,请使用 strcpystrncpy,请参阅 man 页面了解这两个函数的描述 :)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接