2010-05-08 105 views
4

可能是我失蹤的一些愚蠢但是,爲什麼我得到這個警告?basename()返回int?

static void foo(char *path) { 
    char *bname; 
    char *path2 = strdup(path); 
    bname = basename(path2); 

(與基名線()調用):警告:賦值時將整數指針不進行強制轉換

事實上,如果我改變這一點,警告消失:

bname = (char *)basename(path2); 

男人3基地告訴我:

char *basename(char *path); 

Both dirname() and basename() return pointers to null-terminated strings. 

什麼給?

+5

'man 3 basename'也列出了聲明基本名稱的頭文件,FWIW。 – 2010-05-08 08:06:12

回答

12

否定的。它適用於我。你確定你包含正確的標題嗎?

#include <string.h> 
#include <libgen.h> 

static void foo(char *path) { 
    char *bname; 
    char *path2 = strdup(path); 
    bname = basename(path2); 
} 

你能告訴我們更多關於你的編譯環境嗎?

+11

在C語言中,如果你沒有函數的原型(即包含正確的頭文件),編譯器會假定該函數返回'int'。聽起來這是OP的問題。 – 2010-05-08 07:44:27

+0

羅傑,我相信你有正確的答案。如果您將它作爲答案發布而不是評論,我會選擇您的答案作爲正確答案。 感謝你們倆! – EBM 2010-05-08 07:55:46