2012-08-08 66 views
0

我使用的在碳化物C C這部分代碼/ C++表示陣列額外數據值

char c1[]={0x01}; 
    char c2[]={0x02}; 
    char* c [] = {c1,c2}; 

當我檢查[0],C [1] ..我看到兩個值的C值像這樣在調試模式下

c[0] = \x01\x01 & (x) = *[0] = \x01 
c[1] = \x02\x01\x01 & (x) = *[1] = \x02 

,如果我計算長度這樣

int cclen2 = strlen(c[0]); 

得到cclen2 = 2;但我應該得到的值作爲1

回答

3

c1c2沒有空終止,並strlen()需要一個空終止(與很多其他的C字符串處理函數,像printf("%s", c1)例如一起)。當字符串文字用於初始化char[]時,只會隱式添加空終止符。

更改爲:

char c1[] = { 0x01, 0x00 }; 
char c2[] = { 0x02, 0x00 }; 

或:

char c1[] = "\x01"; 
char c2[] = "\x02"; 
1

陣列創建一個特殊的類型恆定指針。如果你將它聲明爲char,那麼最後會添加一個空字符。 實際上你的c [0]語句被替換爲*(c + 0);並獲得地址c。 (c)代替strlen(c [0]); 和你有全長的字符串,直到空字符。

我認爲這是足夠的解釋。