jon*_*ers 2 c unix 64-bit gcc dirname
我正在使用libgen.h中的dirname从文件名的路径获取目录路径.
这是它的签名:
char * dirname (char *path)
Run Code Online (Sandbox Code Playgroud)
在32位机器上编译或使用-m32与gcc编译时,一切正常.
我的代码看起来像这样:
char* path = "/path/to/my/file.txt";
char* path_cpy = strdup(path);
const char* dir = (const char*)dirname(path_cpy);
Run Code Online (Sandbox Code Playgroud)
如果我在64位机器上编译,我会收到警告:
"warning: cast to pointer from integer of different size"
Run Code Online (Sandbox Code Playgroud)
这将修复警告,但在运行时崩溃:
const char* dir = (const char*)(uintptr_t)dirname(path_cpy);
Run Code Online (Sandbox Code Playgroud)
我之前从未尝试过编译32/64位,有没有办法解决这个问题?
你是否包括头文件包含dirname(libgen.h我的系统,检查/usr/include)的定义?
该警告"cast to pointer from integer of different size"听起来像是从一个int未经原型定义的函数的默认返回代码转换而来.
这可能是因为发生的事情是,你int和char *数据类型是32位代码相同的大小,但是,当你切换到64位,它们实际上是不同的尺寸.
您可以通过打印出验证这一点sizeof(int)和sizeof(char*),看是否他们是不同的.