2012-05-09 112 views
0

我的代碼片段包含在(36和37是行號):初始化時將整數指針沒有指針和整數之間的演員和比較

36  char* colon_unit = extract_colon_unit(zPath, path, &p_index); 
37  if (colon_unit == NULL) 

在編譯過程中,我得到一個警告:

AC:36:警告:初始化時將整數指針不進行強制轉換

當我刪除的指針,

char colon_unit = extract_colon_unit(zPath, path, &p_index); 

它表明:

交流轉換器:37:警告:指針和整數之間的比較

我怎樣才能解決這個問題?

+1

'extract_colon_unit'返回什麼? – interjay

+1

你的'extract_colon_unit'聲明如何?在使用發生之前是否聲明? –

+1

請發佈extract_colon_unit()聲明。 –

回答

2

這意味着函數extract_colo_unit()正在返回一個字符(char)而不是一個字符指針(char*)。如果將數據類型colon_unit更改爲char,那麼您將不會獲得第一個錯誤,因爲現在變量和賦值都是相同的類型。

但是,當您將colon_unit與NULL進行比較時,則會將一個字符(即colon_unit)與一個指針進行比較。也就是說,NULL被定義爲(void*)0,所以你得到了第37行的第二個錯誤。

解決方案完全取決於你的邏輯以及這個函數返回NULL的含義。但是,如果是錯誤情況或者沒有有效值的情況,它只是返回0而不是NULL,並且與行37中的0進行比較。

+0

嗨binW。感謝您的解釋。函數colon_unit返回一個目錄的名稱。所以,如果(colon_unit == NULL)檢查目錄的名稱是否爲空。因此,我認爲我不能使用if(colon_unit = 0) – Tinyspark

+0

@Tinyspark如果函數extract_colon_unit返回名稱,那麼它的返回類型應該是char *而不是char,在這種情況下,你不應該得到任何上述錯誤。你可以在你的問題中添加extract_colon_unit函數的聲明嗎? – binW