考虑以下代码段:
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 *
如果数组具有相同的类型,为什么我会这样做?我该如何解决?
提前致谢
答案 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
中的地址。这是非法的,因为数组是指向内存的常量指针。你无法改变它。
因为它是一个字符数组。复制使用strcpy
或strncpy
请参阅手册页以获取两者的描述:)