C 将字符数组分配给另一个字符数组

C 将字符数组分配给另一个字符数组,c,arrays,char,C,Arrays,Char,我想将一个字符数组分配给另一个字符数组,但以下操作不起作用 unsigned char myval1[6] = {0x01, 0x01, 0x01, 0x01, 0x01, 0x01}; unsigned char myval2[6]; myval2 = &myval1[0]; 你可以试试这样的 unsigned char myval1[6] = {0x01, 0x01, 0x01, 0x01, 0x01, 0x01}; unsigned char *myval2; myva

我想将一个字符数组分配给另一个字符数组,但以下操作不起作用

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

你可以试试这样的

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

你可以试试这样的

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

这是一件你不能做的事情。一种可能性是

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

这是一件你不能做的事情。一种可能性是

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

C
中,不能分配数组。您应该使用
memcpy()
函数来复制数组

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

C
中,不能分配数组。您应该使用
memcpy()
函数来复制数组

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

C-数组不可复制分配。
您必须自己复制(使用
std::copy
(C++)或
memcpy
(C))。

在C++11中,您可以改用
std::array

C-array不可复制分配。
您必须自己复制(使用
std::copy
(C++)或
memcpy
(C))。

在C++11中,可以改用
std::array

否,不能在C中分配数组

必须手动复制每个数组元素。执行此操作的标准库函数是
memcpy()


最后一个参数是要复制的字节数,建议使用
sizeof
。请注意,如果
myval1
小于
myval2
,则上述行为将是未定义的行为,因为它将读取超出
myval1
的范围。您必须小心。

不,您不能在C中分配数组

必须手动复制每个数组元素。执行此操作的标准库函数是
memcpy()


最后一个参数是要复制的字节数,建议使用
sizeof
。请注意,如果
myval1
小于
myval2
,则上述行为将是未定义的行为,因为它将读取超出
myval1
的范围。你必须小心。

这方面的一个好习惯用法是:

memcpy(&myval2, &myval1, sizeof myval2);
通过将
&x
sizeof x
配对,您可以确保始终复制正确的字节数,即使在其他地方使用变量名时出错


其他帖子中建议的版本仍然有效,因为
myval2
是一个数组,所以
(void*)myval2==(void*)和myval2
这是一个很好的习惯用法:

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;
unsigned int-myval1[6]={0x01,0x01,0x01,0x01,0x01};
无符号整数myval2[6];
无符号int*add=&myval1[0];
试试这个

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

cout << *add << endl;
unsigned int-myval1[6]={0x01,0x01,0x01,0x01,0x01};
无符号整数myval2[6];
无符号int*add=&myval1[0];

可能不是OP想要的。它为myval1创建了一个别名,并且不复制任何值。这可能不是OP所想的。它为myval1创建别名,不复制任何值。您尝试执行的操作会导致编译器错误,因为此处的数组变量myval1、myval2始终是常量类型,因此您无法修改解决方案中实际执行的数组的基址。您可以按照下面给出的任何答案复制数组。您尝试执行的操作会导致编译器错误,因为此处的数组变量myval1、myval2始终是常量类型,因此您无法修改解决方案中实际执行的数组的基地址。您可以按照下面给出的任何答案复制数组。这如何将
myval1
的值复制到
maval2
?这里没有myval2,您需要使用变量add,add++访问下一个值。是变量add address将指向myval1的起始地址,因此*add将打印1*add++=1[myval1[1]]*add++=1[myval1[2]]这如何将
myval1
的值复制到
maval2
?这里没有myval2,您需要使用变量add,add++来访问下一个值。是变量add address将指向myval1的起始地址,因此*add将打印1*add++=1[myval1[1]]*add++=1[myval1[2]]