我想将一个char数组赋值给另一个char数组,但以下操作不起作用。将char数组赋值给另一个char数组
unsigned char myval1[6] = {0x01, 0x01, 0x01, 0x01, 0x01, 0x01};
unsigned char myval2[6];
myval2 = &myval1[0];
我想将一个char数组赋值给另一个char数组,但以下操作不起作用。将char数组赋值给另一个char数组
unsigned char myval1[6] = {0x01, 0x01, 0x01, 0x01, 0x01, 0x01};
unsigned char myval2[6];
myval2 = &myval1[0];
这是一件事,你不能与分配做。一种可能性是
memcpy(myval2, myval1, sizeof(myval2));
在C
你不分配数组。你应该使用memcpy()
函数来复制数组。
memcpy(myval2, myval1, sizeof(myval2));
C-Array不可复制分配。
您必须自己复制(使用std::copy
(C++)或memcpy
(C))。
在C++ 11中,您可以改用std::array
。
不,你不能在C
必须在每个数组元素手动复制分配阵列。标准库函数来做到这一点memcpy()
:
memcpy(myval2, myval1, sizeof myval2);
最后一个参数是要复制的字节数,并使用sizeof
是非常推荐。请注意,如果myval1
是更小比myval2
,上述将是未定义的行为,因为它会读取超出myval1
的界限。你一定要小心。
一个很好的成语是这样的:
memcpy(&myval2, &myval1, sizeof myval2);
通过配对&x
和sizeof x
您确保您始终复制字节的正确数量,即使你犯了一个错误在其他地方有变量名。
在其他帖子中建议的版本无论如何都是有效的,因为myval2
是一个数组,因此(void *)myval2 == (void *)&myval2
。
试试这个
unsigned int myval1[6] = {0x01, 0x01, 0x01, 0x01, 0x01, 0x01};
unsigned int myval2[6];
unsigned int* add = &myval1[0];
cout << *add << endl;
以及如何将'myval1'的值复制到'maval2'? –
这里没有myval2,你需要使用变量add,add ++来访问下一个值。是的变量添加地址将指向myval1的起始地址,所以* add将打印1; * add ++ = 1 [myval1 [1]]; * add ++ = 1 [myval1 [2]] –
什么你正在尝试做会产生编译错误,因为数组变量这里** ** myval1,** ** myval2总是恒定的类型,所以你不能修改的基址你实际上在你的解决方案中做的一个数组。你可以按照下面给出的任何答案复制数组。 – prince