2014-04-07 111 views
0

我想将一个char数组赋值给另一个char数组,但以下操作不起作用。将char数组赋值给另一个char数组

unsigned char myval1[6] = {0x01, 0x01, 0x01, 0x01, 0x01, 0x01}; 
unsigned char myval2[6]; 
myval2 = &myval1[0]; 
+0

什么你正在尝试做会产生编译错误,因为数组变量这里** ** myval1,** ** myval2总是恒定的类型,所以你不能修改的基址你实际上在你的解决方案中做的一个数组。你可以按照下面给出的任何答案复制数组。 – prince

回答

0

你可以尝试这样的事情..

unsigned char myval1[6] = {0x01, 0x01, 0x01, 0x01, 0x01, 0x01}; 
unsigned char *myval2; 
myval2 = &myval1[0]; 
+0

可能不是OP所想到的。它为myval1创建一个别名,并且不复制任何值。 – laune

+0

雅,我试图保留他的第三行的语法.. – 51k

1

这是一件事,你不能与分配做。一种可能性是

memcpy(myval2, myval1, sizeof(myval2)); 
1

C你不分配数组。你应该使用memcpy()函数来复制数组。

memcpy(myval2, myval1, sizeof(myval2)); 
2

C-Array不可复制分配。
您必须自己复制(使用std::copy(C++)或memcpy(C))。
在C++ 11中,您可以改用std::array

0

不,你不能在C

必须在每个数组元素手动复制分配阵列。标准库函数来做到这一点memcpy()

memcpy(myval2, myval1, sizeof myval2); 

最后一个参数是要复制的字节数,并使用sizeof是非常推荐。请注意,如果myval1更小myval2,上述将是未定义的行为,因为它会读取超出myval1的界限。你一定要小心。

0

一个很好的成语是这样的:

memcpy(&myval2, &myval1, sizeof myval2); 

通过配对&xsizeof x您确保您始终复制字节的正确数量,即使你犯了一个错误在其他地方有变量名。

在其他帖子中建议的版本无论如何都是有效的,因为myval2是一个数组,因此(void *)myval2 == (void *)&myval2

0

试试这个

unsigned int myval1[6] = {0x01, 0x01, 0x01, 0x01, 0x01, 0x01}; 
unsigned int myval2[6]; 
unsigned int* add = &myval1[0]; 

cout << *add << endl; 
+0

以及如何将'myval1'的值复制到'maval2'? –

+0

这里没有myval2,你需要使用变量add,add ++来访问下一个值。是的变量添加地址将指向myval1的起始地址,所以* add将打印1; * add ++ = 1 [myval1 [1]]; * add ++ = 1 [myval1 [2]] –

相关问题