2016-09-19 19 views
0
const char reset = '3'; 
char savedArray[32] = "0000000000000000000000000000000"; 
savedArray[reset] = '1'; 
Serial.println(savedArray[reset]); 
Serial.println(savedArray[3]); 
Serial.println(savedArray); 

閱讀陣列的值,所以我在3位置改變savedArray的價值,但是當我再讀一遍,我覺得它0 ..我在做什麼錯?爲什麼不重置爲3?不能用C

串行輸出:

1 
0 
0000000000000000000000000000000 
+1

使用saveArray [32] = {0};而不是savedArray [32] = 0000000000000000000000000000000「; –

+4

'3'是ASCII碼,並且是48 + 3. –

+1

爲什麼使用'char reset'而不是'int reset'? –

回答

3

否,要更改的數組元素51(的'3'ASCII table的值),所以要訪問的數組的範圍之外。

更改爲const char reset = 3;

4

假設ASCII或EBCDIC甚至編碼'3'是一個值大於32的情況下(在ASCII,它是51)。

savedArray[reset]使用此行爲是不確定因爲你試圖將界限數組savedArray外部訪問的索引。使用const char reset = 3;的數值的值分配給任何數字類型,,包括const char

+0

...甚至Unicode ... –

2

所以我在3位置改變savedArray的價值。

等等,你出錯了。你根本沒有改變位置3的價值。在你的代碼,

const char reset = '3'; 

相同

const char reset = 51; //considering ASCII 

因爲,字符文字(不變'3'代表小數51ACSII)和其後來

savedArray[reset] = '1'; 

無法訪問,因爲savedArray是大小32.你可能想寫

const char reset = 3; //decimal 3 

,或者

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