2017-01-08 14 views
3

私は、文字列のリストを作成し、私はそれを印刷するには、次のコードを使用:この文字列リストをどのように印刷していますか?

int i; 
char* p = "My\0name\0is\0\0"; 
for (i = 0; *(p + i) != '\0' && *(p + i + 1) != '\0'; i++) 
{ 
    if (*(p + i) == '\0') 
     printf(" "); 
    else 
     printf("%c", *(p + i)); 
} 

は、なぜこれが唯一の文字列の残りの部分なしで、Mを印刷していますか? i == 1の値については

+0

文字列がヌル(ゼロ)で終了していて、その中にヌル文字を入れることはできません。 – leonbloy

+2

以前にデバッガを使用したことがない人は、今すぐに学ぶのに最適な時期です。デバッガを使用すると、変数とその値を監視しながら、コードを1行ずつ進めることができます。デバッガを使用できることは、趣味であっても、あらゆる種類のプログラミングを行いたいと考える人にとっては不可欠なスキルです。 –

答えて

3

、条件チェック声明

*(p + i) != '\0' && *(p + i + 1) != '\0' 

は(FALSEへevauatesを)失敗したので、forループが終了します。

あなたの意図を1として、あなたは人間が読めるロジックに翻訳され、

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

として条件チェックを修正することができ、*(p + i)*(p + i + 1)両方が'\0'

されるまで

、のように見えるが継続

+2

だから、 '&&'を '||'に置き換えてください。 –

+1

@UFCInsider - はい – Soren

0
*(p + i + 1) 

等価\0の場合iが1の場合

関連する問題