无法读取C中的数组值

时间:2016-09-19 07:53:15

标签: c arrays pointers char

const char reset = '3';
char savedArray[32] = "0000000000000000000000000000000";
savedArray[reset] = '1';
Serial.println(savedArray[reset]);
Serial.println(savedArray[3]);
Serial.println(savedArray);

所以我正在更改位置savedArray的{​​{1}}的值,但是当我再次读出它时,我发现它3 ..我做错了什么?为什么不重置与3相同?

串行输出:

0

3 个答案:

答案 0 :(得分:4)

假设ASCII或甚至EBCDIC编码'3'是大于32的值。(在ASCII中,它是51)。

savedArray[reset]中使用此行为的行为是 undefined ,因为您正在尝试访问数组savedArray bounds 之外的索引。使用const char reset = 3;数字值3分配给任何数字类型,包括 const char

答案 1 :(得分:3)

不,您正在更改数组元素51ASCII table中的'3'的值),因此您将访问数组边界之外。

更改为const char reset = 3;

答案 2 :(得分:2)

  

所以我要更改位置savedArray 3值。

等等,你出错了。您根本不会更改位置3的值。在您的代码中,

const char reset = '3';

相同
const char reset = 51;  //considering ASCII

因为,字符文字(常量'3'代表十进制51ACSII 中的),以后为< / p>

savedArray[reset] = '1';

是超出限制的访问权限,因为savedArray的大小为32.您可能想要编写

 const char reset = 3;  //decimal 3

或,

#define RESET 3  //MACROS are better suited as "array index", just suggesting