basename()返回int?

EBM*_*EBM 5 c

可能是我想念的傻事,但为什么我会收到这个警告?

static void foo(char *path) {
    char *bname;
    char *path2 = strdup(path);
    bname = basename(path2);
Run Code Online (Sandbox Code Playgroud)

(带有basename()调用的行):warning:赋值从整数中生成没有强制转换的指针

实际上,如果我改变这一点,警告就会消失:

    bname = (char *)basename(path2);
Run Code Online (Sandbox Code Playgroud)

man 3 basename告诉我:

char *basename(char *path);

Both dirname() and basename() return pointers to null-terminated strings.
Run Code Online (Sandbox Code Playgroud)

是什么赋予了?

Dac*_*cav 13

负.它适用于我.你确定你包含了正确的标题吗?

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

static void foo(char *path) {
    char *bname;
    char *path2 = strdup(path);
    bname = basename(path2);
}
Run Code Online (Sandbox Code Playgroud)

你能告诉我们更多关于你编译环境的信息吗?

  • 在C中,如果没有函数原型(即包含正确的头),编译器将假定函数返回'int'.听起来这是OP的问题. (13认同)