首页 > 解决方案 > 覆盖 C 数组中的第一个元素

问题描述

下面的代码有效:

uint8_t test[2] = "7";
cout << test[0];

但是如果我之后添加以下代码以便将“7”更改为“5”,那么它将不起作用:

test[0] = "5";
cout << test[0];

我得到错误:

错误:从 'const char*' 到 uint8_t 的无效转换

这是为什么?

标签: c++arrays

解决方案


"7"是一个字符串文字。字符串是字符数组,字符串字面量也是如此。字符串文字可用于初始化其他字符数组。uint8_t看起来不像字符类型,但它实际上是unsigned char. 因此,uint8_t test[2]它是一个字符数组,可以使用字符串文字对其进行初始化。

test[0]不是字符数组。它是单个字符(特别是,它是数组中的第一个字符test)。无法将字符串文字分配给字符。但是,可以将字符文字分配给字符,在这种情况下您可能打算这样做:

test[0] = '5';

PStest = "5"也不行。数组可以初始化,但不能赋值。


推荐阅读