2012-05-10 19 views
2

你能說我在這裏犯了什麼錯誤嗎?當我設置url = 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之間混淆? – Nick

+0

一個次要的nit,縮寫時的空字符是帶有一個L的'NUL'。我認爲這很方便避免與'NULL'宏混淆。我不確定哪個先出現(* ASCII 1963,C 1972 ...我想我有我的答案*)。我不確定哪個或多或少會令人困惑。 – user7116

回答

11

崩潰是

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

指針指向NULL和你想從那裏讀,有效地解引用NULL指針,這將產生一個segmentation fault

指着一個空字符串像

char *url = ""; 

是OK和指向一個空位置像

char *url =NULL; 

如果取消引用這是危險的完全不同。

一個空字符串在內存中有一個有效的位置並且可以被取消引用。它只是它沒有任何內容而期待\0

+0

首選我會說「空字符串」,而不是「空字符串」。通過名稱「null」調用不同的東西首先是造成這種混淆的原因。 –

+0

@SteveJessop嗯......你說得對。糾正。謝謝 :) –