2

これがコードです。フラグなしでGNUGCCでコンパイルするCodeBlocks10.05を使用してこのコードを実行すると、期待した結果が得られません。'z'最初の文字列リテラルまたはヌルターミネータの文字の1つによって設定されていない場合、配列内のすべての文字がaに変更されることを期待していました。

#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

1 に答える 1

4
char stringVar[10] = "Hello";

最初の 5 をHello残りの に初期化する\0ため、if 条件は false になります

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`
于 2013-02-24T02:20:09.403 に答える