2013-02-24 27 views
2

這裏是代碼,當我使用CodeBlocks10.05編譯時使用GNU GCC編譯而沒有標記時,我沒有得到我希望的結果。我希望如果數組中的所有字符都不是由初始字符串文字或空終止符中的一個字符設置,那麼它們將被更改爲'z'爲什麼我的字符數組在使用字符串文字進行初始化後,不能將字符賦值給我的字符數組?

#include <iostream> 
#include <string> 
#include <stdlib.h> 
#include <cstring> 

using namespace std; 

int main(void) 
{ 
    char stringVar[10] = "Hello"; 
    //char stringVar[10] = {'H', 'e', 'l', 'l', 'o', '\0'}; 
    //char stringVar[10] = {'H', 'e', 'l', 'l', 'o'}; 
    //char stringVar[10] = {}; 

    for(int i = 0; i < 10; i++) 
    { 
     if(stringVar[i] != 'H' and 
      stringVar[i] != 'e' and 
      stringVar[i] != 'l' and 
      stringVar[i] != 'o' and 
      stringVar[i] != '\0') 
     { 
      stringVar[i] = 'z'; 
     } 
    } 

    for(int i = 0; i < 10; i++) 
    { 
     cout << (int)stringVar[i] << "\t" << (char)stringVar[i] << endl; 
    } 
    return 0; 
} 

這裏是我的輸出:

72  H 
101  e 
108  l 
108  l 
111  o 
0 
0 
0 
0 
0 

這是我所期待的:

72  H 
101  e 
108  l 
108  l 
111  o 
0 
122  z 
122  z 
122  z 
122  z 

所以我在做什麼錯在這裏?謝謝!

回答

4
char stringVar[10] = "Hello"; 

初始化前5至Hello的其餘部分\0,所以你如果條件將是錯誤的

if(stringVar[i] != 'H' and 
    stringVar[i] != 'e' and 
    stringVar[i] != 'l' and 
    stringVar[i] != 'o' and 
    stringVar[i] != '\0') <<------ this condition will always return false, so you can't modify `stringVar` 
+0

你是正確的,該程序可以作爲目前打算。我不知道爲什麼我沒有意識到數字零是空終止字符。取出這種情況可以得到理想的結果。我希望能夠使用這段代碼精確地計算編譯器如何在各種註釋掉的方法中初始化數組。謝謝! – Leonardo 2013-02-24 02:23:04

+1

@Leonardo如果你把條件取出來,那麼在** 5th **索引處的元素不是** 0 **。你確定這是你想要的嗎?您的預期輸出說不然。 – Mahesh 2013-02-24 02:25:24

+0

@Mahesh好吧,它並不像我原本希望的那樣工作,但現在我明白它更好,它的工作原理是「預期的」。說實話,我不確定如何讓它輸出我最初的期望。 – Leonardo 2013-02-24 02:26:51