2011-11-01 232 views

回答

65

檢查第一個字符是否爲'\ 0'。你也應該檢查你的指針是否爲NULL。

char *c = ""; 
if ((c != NULL) && (c[0] == '\0')) { 
    printf("c is empty\n"); 
} 

您可以將這兩項檢查放在一個函數中,以方便重複使用。如果c不是零,並且字符數組'c'的第一個字符不是'\ 0'或零,那麼......「。如果c不是零,並且字符數組'c'的第一個字符不是'\ 0'或零,那麼...」。

&&簡單地結合了這兩個條件。這基本上是這樣說的:

if (c != NULL) { /* AND (or &&) */ 
    if (c[0] == '\0') { 
     printf("c is empty\n"); 
    } 
} 

如果你不清楚你可能想得到一個好的C編程書籍。我可以推薦一本名爲「The C Programming Language」的書。

相當於最短的版本上面會:

if (c && !c[0]) { 
    printf("c is empty\n"); 
} 
+0

@Zack:c && c [0]是什麼意思?你能解釋一下嗎? – Aan

+0

我將編輯答案。 – codemaker

+0

就我個人而言,我將檢查空字符串檢查的空指針;這兩者並不真正相關。 「更便攜」可能不是你想說的,因爲你在這裏展示的所有代碼都是有效的C(和C++)。 –

10

檢查指針NULL,然後使用strlen查看它是否返回0
NULL檢查很重要,因爲通過NULL指針指向strlen會調用未定義的行爲

+0

非常感謝Als – Aan

9

我的優選方法:

if (*ptr == 0) // empty string 

可能更常見:

if (strlen(ptr) == 0) // empty string 
+4

請注意,第二個「更常見」的可能性也不必要地慢。 – jpalecek

+1

@jpalecek,緩慢通常並不重要,如果你不習慣第一種形式,「strlen」會更容易理解。 –

+0

感謝Mark Ransom。 – Aan

6

空字符串具有一個單一的空字節。因此,測試if (s[0] == (char)0)

+2

不需要'(char)'強制轉換。 – Jens

0
if (!*ptr) { /* empty string */} 

同樣

if (*ptr) { /* not empty */ } 
+1

@igraczech,嗯,這應該適用於這種情況char * str =「」; if(!* str){printf(「empty \ n」); }。我錯過了一些微妙的情況嗎? – alvin

+0

對不起,你是對的 - 這是我愚蠢的C指針監督。我有這樣的情況,str只是指向一個包含'\ 0'的地址。所以指針(* str)在值(str指向的地址的內容)爲null時是非空的。 – igraczech

1

我寧願使用strlen功能庫函數以最好的方式來實現。

所以,我會寫 如果(strlen的(P)== 0)//空字符串

+1

好主意,讓我們遍歷整個字符串(你知道,它的大小可以是2GB),以查明它是否至少包含一個字符! –

+0

我很抱歉..你是對的.. – bhuwansahni

+0

我發現strlen會導致崩潰,如果char *爲NULL ... – Todd

1

給它一個機會:

嘗試獲得通過字符串函數獲得(串) 然後檢查條件如果(字符串[0] =='\ 0')

相關問題