2016-05-15 47 views
0

我在C++中學習指針,雖然不太清楚,但我想慢慢到達目標。用指針表示法循環訪問數組

我的目標是寫一個函數,使用指針表示法來檢查數組,並更改輸入的大小寫。

例如

("ab7d") myToUpper() -> AB7D

這裏是我實現這個想法。

void myToUpperCase(const char *source, char *dest) 
{ 
    for (int i = 0; *(source + i) != '\0'; i++) 
    { 
     *(dest + i) = toupper(* (source + i)); 
    } 
} 

結果

("ab7d") myToUpper() -> AB7D\377

會有人心中解釋背後\377的理由被添加到輸出,很明顯,我正在尋找剛源要與別的加入改變了這裏輸出。

謝謝

+0

你不是null終止你的輸出。 –

+0

@KerrekSB你會介意解釋嗎?我對C++相當陌生。 – 23k

+1

將'for'循環變成一個do-while循環.. –

回答

1

字符串是以'\ 0'字節作爲終止字符的字符數組。

您的代碼正在複製除最後'\ 0'字節之外的任何內容。 因此,如果您使用\ 0'字節代碼來終止dest,則一切正常。 (您正在觀察的'\ 377'只是發生在dest中該位置的字節。)

例如,基於

void myToUpperCase(const char *source, char *dest) 
{ 
    for (int i = 0; ; i++) 
    { 
     if (*(source + i) == '\\0') 
     { 
      *(dest + i) = *(source + i); 
      break; 
     } 
     else 
     { 
      *(dest + i) = toupper(* (source + i)); 
    } 
} 

您也可以嘗試,沒有任何指標i另一種解決辦法:你可以更改您的代碼

while(*source++ = *dest++) /* empty body */; 

(純粹主義者(有效)可能使用循環條件,難聞的氣味中的副作用標誌!但它只是應該給一個想法....)