2012-02-12 63 views
0
陣列

我已經聲明瞭以下字符串數組: 字符* arrayIndi​​ces [100] = {0};檢查空字符串上的

我做的這是聲明爲recp-比較> ut_line:使用

struct utmp { 
.... 
char ut_line[32] 
} 

strcmp(arrayIndices[i], (char*)recp->ut_line)) 

這給了我一個分割錯誤。 我也試過這些gdb:

if (arrayIndices[i] == NULL) 
if (arrayIndices[i] == "\0") 

第二個變成錯誤。 arrayIndi​​ces [i]打印時顯示值爲0x0。

回答

1

您需要使用單引號,不是報價,這裏:

if (arrayIndices[i] == '\0')

+0

這解釋它。謝謝! – user994165 2012-02-12 06:55:58

+0

但是'arrayIndi​​ces [I]'是'字符*'是否有意義比較一個'char *'和一個字符文字? – cnicutar 2012-02-12 07:05:31

1

strcmp失敗,因爲沒有分配給arrayIndices[i]內存。您可以檢查,像這樣:

if (!arrayIndices[i] || !arrayIndices[i][0]) 
    /* Empty. */ 
+0

第一個提供工作on Rails的String#blank?方法。在第二次檢查時,它無法訪問內存。我在想「if(arrayIndi​​ces [i] == 0)」可能是做這件事的最好方法。 – user994165 2012-02-12 06:44:27

+0

@ user994165'arrayIndi​​ces [i] == NULL'完全等同於'!arrayIndi​​ces [i]'。 – cnicutar 2012-02-12 06:45:19

+0

由於某種原因,在gdb中做了一個測試「p(arrayIndi​​ces [i] == NULL)」,它給了我一個'無符號'NULL'在當前上下文中'。但實際上運行它的作品。在gdb中我能使用 「P(arrayIndi​​ces [I] = '\ 0'」 雖然。 – user994165 2012-02-12 06:55:32

0

@ cnicutar的答案是正確的,但尋找一個有點太succint我。我想寫

if (NULL == arrayIndices[i] || 0 == strlen(arrayIndices[i])) 
    /* empty */ 

你擔心,如果strlen可能需要太多的CPU時間?永遠不要擔心,

在另一方面@ StilesCrisis的答案是錯的。如果我有足夠的聲譽,我會低估它!其實我很驚訝地發現它甚至可以編譯。 (也許由於'\0' == 0 == NULL在大多數平臺)

題外話:你可能有興趣在由紅寶石:-)