2017-01-08 26 views
1

私はchar配列に書き込んでいますが、印刷すると2つの異なる出力が得られます。私は、これは多くのコードですけど、次のことができた場合 - 私は別の出力を毎回取得していますなぜ多分キャッチしてみてください...まずコード:2つの出力が異なるのはなぜですか?

int len = strlen(oldStr); 
int i = 0; 
char c; 

while (i < len - 1) 
{ 
    c = *(oldStr + i); 

    if (isSpace(c)) { 
     c = *(oldStr + i + 1); 

     if (!isSpace(c)) { 
      *(newStr + i) = '\0'; 
      printf(" "); 
     } 
    } else { 
     *(newStr + i) = c; 
     printf("%c", *(newStr + i)); 
    } 

    i++; 
} 
*(newStr + i) = '\0'; 
*(newStr + i + 1) = '\0'; 

私はここに印刷していた場合、それを文字列リスト全体をそのまま印刷します。

しかし、私は印刷にこれを使用するときに、:

for (i = 0; !(*(newStr + i) == '\0' && *(newStr + i + 1) == '\0'); i++) { 
    if (*(newStr + i) == '\0') 
     printf(" "); 
    else 
     printf("%c", *(newStr + i)); 
} 

それだけで文字列の一部を印刷します。例えば

"One two three four\n\tfive six"
最初のコード印刷"One two three four five six"
第2のコード印刷"One two three"

なぜ?

+2

あなたが見ている出力を生成するプログラムを作成するために、あなたが提供したコードを見ている人が、そのコードをどのようにしなければならないのでしょうか? – jxh

+0

'* newStr'はどこで宣言しましたか? – opisthofulax

+0

それは私にパラメータとして与えられました –

答えて

2

\nの後に\tのような2つの連続したisspace()がある場合は、newStr []では何も入力せず、iをインクリメントします。これは、newStr []の初期化されていない文字を1つ与えます。

関連する問題