gpt4 book ai didi

c - Unix C - 为 64 位中断编译 "dirname"

转载 作者:行者123 更新时间:2023-12-04 00:48:10 28 4
gpt4 key购买 nike

我正在使用 libgen.h 中的 dirname 从文件名路径获取目录路径。

这是它的签名:

char * dirname (char *path)

在 32 位机器上编译或将 -m32 与 gcc 一起使用时,一切正常。

我的代码是这样的:

char* path = "/path/to/my/file.txt";
char* path_cpy = strdup(path);
const char* dir = (const char*)dirname(path_cpy);

如果我在 64 位机器上编译,我会收到警告:

"warning: cast to pointer from integer of different size"

这将修复警告,但会在运行时崩溃:

const char* dir = (const char*)(uintptr_t)dirname(path_cpy);

我以前从未尝试过交叉编译 32/64 位,有没有办法解决这个问题?

最佳答案

您是否包含包含 dirname 定义的头文件? (在我的系统上是 libgen.h, checkin /usr/include)?

警告"cast to pointer from integer of different size"听起来像是从 int 转换出来的,未定义原型(prototype)的函数的默认返回码。

很可能发生的事情是您的 intchar *对于 32 位代码,数据类型的大小相同,但是当您切换到 64 位代码时,它们的大小实际上不同。

您可以通过打印出 sizeof(int) 来验证这一点和 sizeof(char*)看看它们是否不同。

关于c - Unix C - 为 64 位中断编译 "dirname",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4054089/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com