2010-05-08 81 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