在C++中声明和初始化char数组



我试图在if-else块中声明并初始化一个无符号的char arr,但我看到了"无法在赋值中将"转换为"无符号字符"错误有人能帮我弄清楚这是怎么回事吗?我是c++新手。

编辑:

unsigned char arr[4]; 
if (..){
arr[4] = {0x0F, 0x0F, 0x0F, 0x0F};
} else {
arr[4] = {0xFF, 0xFF, 0xFF, 0xFF};
}

走下面的路没有任何问题。但我需要在里面完成任务,所以我试图理解上面的片段有什么问题?

unsigned char arr[4] = {0xFF, 0xFF, 0xFF, 0xFF};

恐怕您尝试使用的初始值设定项语法只能用于变量声明。

可能的解决方案是声明一个新数组并使用memcpy 复制它

#include <iostream>
#include <cstring>
int main()
{
unsigned char arr[4] =  {0x0F, 0x0F, 0x0F, 0x0F};
if (elsecondition){
unsigned char arr1[4] = {0xFF, 0xFF, 0xFF, 0xFF};
memcpy(arr, arr1, sizeof(arr));
}
return 0;
}

或者一次分配一个元素

#include <iostream>
int main()
{
unsigned char arr[4] =  {0x0F, 0x0F, 0x0F, 0x0F};
if (elsecondition){
// we can use a loop, since all values are identical
for (int i = 0; i < sizeof(arr); ++i)
arr[i] = 0xFF;
}
return 0;
}

第一个:arr[4] = {0x0F, 0x0F, 0x0F, 0x0F};将尝试为数组的第五个元素分配一些东西(但类型不兼容,这将是一个越界访问(。

此语法仅在数组初始化中可用,但是std::array重载operator=并支持您想要的内容:

std::array<unsigned char, 4> arr; 
if (...){
arr = {0x0F, 0x0F, 0x0F, 0x0F};
} else {
arr = {0xFF, 0xFF, 0xFF, 0xFF};
}

最新更新