2012-05-10 9 views
2

私はここで何をしているのですか? url = NULLを設定した後、NULLがあるかどうかをif(strlen(url)!=0)またはif(url!=NULL)で判断すると、プログラムがクラッシュするか、または中断します。私はそれが非常に簡単なことだが、私は間違ったことをしている。CでのNULL比較の誤り

#include <string.h> 
#include <stdio.h> 
#include <stdlib.h> 

void main() 
{ 
    char* url="/v1.0/fafffsdf" ; 
    url=NULL; 
    printf("%s\n",url); 
    if(url!=0) 
    { 
     printf("It ain't NULL\n"); 
    } 
    else 
    { 
     printf("It's NULL\n"); 
    } 
} 
+2

'\ 0'のNULL文字とNULLポインタを示すNULLの間で混乱していますか? – Nick

+0

マイナーニット、省略時のヌル文字は1つのLを持つ 'NUL'です。私は' NULL'マクロとの混乱を避けるために便利です。私はどちらが最初に来たのか分からない(* ASCII 1963、C 1972 ...私は私の答えがあると思う*)。そして、どちらが多かれ少なかれ混乱しているのか分かりません。 – user7116

答えて

11

クラッシュは、ポインタがNULLを指しているとあなたが効果的にsegmentation faultを生成しますNULLポインタを参照解除、そこから読み取るしようとしている

printf("%s\n",url); 

です。

char *url = ""; 

ような空の文字列にポインティング

はOKと間接参照ならば危険である

char *url =NULL; 

ようなNULL位置を指すとは全く異なります。

空の文字列はメモリ内の有効な場所を持ち、逆参照することができます。それだけでそれが何も持っていないということを期待するのは\0です。

+0

私は "null string"ではなく "empty string"と言います。最初の場所でこの混乱の原因となるのは、「null」という名前で別のものを呼び出すことです。 –

+0

@SteveJessop hmm ...あなたは正しいです。修正されました。ありがとう:) –