问题描述
我正在尝试在 if else 块中声明和初始化一个无符号字符 arr,但我看到“无法在赋值中将 '' 转换为 '无符号字符'”错误。任何人都可以帮我理解这有什么问题吗?我是 C++ 新手。
已编辑:
unsigned char arr[4];
if (..){
arr[4] = {0x0F,0x0F,0x0F};
} else {
arr[4] = {0xFF,0xFF,0xFF};
}
采用以下方式没有任何问题。但是我需要在 if-else 内部进行赋值,所以我想了解上面的代码片段有什么问题?
unsigned char arr[4] = {0xFF,0xFF};
解决方法
恐怕您尝试使用的初始化语法仅适用于变量声明。
可能的解决方案是声明一个新数组并使用 memcpy 复制它
#include <iostream>
#include <cstring>
int main()
{
unsigned char arr[4] = {0x0F,0x0F,0x0F};
if (elsecondition){
unsigned char arr1[4] = {0xFF,0xFF,0xFF};
memcpy(arr,arr1,sizeof(arr));
}
return 0;
}
或者一次分配一个元素
#include <iostream>
int main()
{
unsigned char arr[4] = {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;
}
,
First of: arr[4] = {0x0F,0x0F};
将尝试为数组的第 5 个元素分配一些东西(但类型不兼容,这将是越界访问)。
此语法仅适用于数组初始化,但是 std::array
重载 operator=
并支持您想要的:
std::array<unsigned char,4> arr;
if (...){
arr = {0x0F,0x0F};
} else {
arr = {0xFF,0xFF};
}