首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mud编译警告:从指针到不同大小的整数的转换

mud编译警告:从指针到不同大小的整数的转换
EN

Stack Overflow用户
提问于 2014-08-23 13:52:35
回答 2查看 134关注 0票数 0

试图在Ubuntu 14.04 LTS & gcc 4.4.7上编译一个MUD (在线文本游戏),我一直得到这样的结果:

vt100.c:在函数get_tactical_map中: vt100.c:1741:警告:将指针转换为不同大小的整数 vt100.c:1805:警告:将指针转换为不同大小的整数

上述每一行的代码都是相同的:

代码语言:javascript
复制
*pto++ = 'a' + ((int) fch % 25);

如果需要的话,我可以链接整个文件,只是不知道上传到哪里。

EN

回答 2

Stack Overflow用户

发布于 2014-08-23 15:33:27

我猜您正在尝试编译由不知道或不关心64位系统上C语言的可移植性问题的人编写的32位代码。

问题是,将指针转换为不能表示其值的整数是未定义的行为。见C11 6.3.2.3§6:

任何指针类型都可以转换为整数类型。..。如果结果不能用整数类型表示,则行为未定义。

可移植代码将使用uintptr_t (或在前C99时代的size_t )的转换,而不是int

显然,指针所持有的地址被用作随机的来源,以获得任意小写字母(我认为Mints97不太可能是正确的,作者只是忘记取消指针,但是没有更多的代码,没有人能肯定地说)。

如果您忽略了警告,原则上,代码实际上可能会在引发整数溢出信号的体系结构上崩溃。更可能的情况是一个可能无害的错误(取决于结果的使用方式):如果(int)fch碰巧是负的,您可能会得到一个特殊字符或大写字母,而不是小写字母。

票数 2
EN

Stack Overflow用户

发布于 2014-08-23 14:31:46

在没有变量声明的情况下,我不能说更多的话,但是当您将指针变量转换为非指针类型(例如,void *int)时,通常会发生此错误。在您的代码中,问题很可能发生在(int) fch中: fch是一个指针,您正在尝试将它转换为int。如果您想提取fch所指向的值,请尝试使用(int) *fch

代码语言:javascript
复制
*pto++ = 'a' + ((int)*fch % 25);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25462662

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档