2016-07-31 18 views
-1

は、それが*strが上停止すべきときと言及されていないことを意味我々はwhile(*str)は無条件に開始されていることがわかります、私はwhileループの開始時にループ条件なし

#include <stdio.h>  

void sp_to_dash(const char *str); 
int main(void) 
{ 
    sp_to_dash("this is a test"); 
    return 0; 
} 
void sp_to_dash(const char *str) 
{ 
    while(*str) //beginning of while loop 
    {    
     if(*str== ' ')printf("%c", '-'); 
     else printf("%c", *str); 
     str++; 
    } 
} 

に遭遇したプログラムは、ですがnullまたは'\0'。コードは正常に動作していますが、私によるとwhile(*str != null)またはwhile(*str != '\0')のようになります。これを私に説明してください。

+0

コードが 'while(* str!= null){...} 'であるとすれば、空文字列、ヌルポインタと' NUL' ASCII文字の '\ (そして、NULLポインタが「NULL」ではなく「NULL」であるBTW)。 Cの初心者の間では多少共通の病気ですが、できるだけ早く修正するべきです。 – 6502

答えて

0

\ 0のascii値が0なので、strが\ 0のときにループが停止するので、(* str!= '\ 0')と全く同じ条件です。文字列の最後を意味します、

* 0以外の値はすべて(* strのような)真の条件であり、whileループはe、gを続行します:while(5){}は無限ループになります。

1

それはこれを書い同じです -

while (*str != '\0') 

'\0'はint型であり、0に相当し、ループの実行に影響を与えません。

- 文字列を==と比較しないでください。演算子は!==です。あなたは(文字列リテラルと比較char)これを使用する場合

これは、エラーが発生します -

while (*str != "\0") 
+1

Therはコード内の文字列ではありません==演算子 –

+0

@ Dr.Haimovitz OPはコードを修正しました。これはその結果です。今度は '!=='も削除しました。 – ameyCU

+0

ok申し訳ありません......... –

1

whileループが動作するために、条件として値を必要とします。 while (*str == '3')のような条件を挿入すると、*strが実際に'3'であるかどうかがチェックされ、そうであれば1と解釈されます(この場合はTrueと考えることができます)。0(またはFalse)と解釈されます。

これは、while (0)またはwhile (1)と書くことができるためです。

今、あなたの状態は、条件チェック中に、あなたはそれが0(他のすべての値(-1、7、32333.34であるかどうかを確認するために*strの値をチェックしますので、*strの値であり、... )がTrueとみなされた場合)strconst char *なので、char値をint値(ASCIIを使用)に変換する必要があります。値0を持つchar'\0'です。