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

问题描述

我正在尝试在 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};
}

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...