2013-02-24 61 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

相关问题