警告:从指针转换为不同大小的整数
试图在Ubuntu 14.04 LTS&gcc 4.4.7上编译一个MUD(在线文本游戏),我一直在这样做:
vt100.c:在函数'get_tactical_map'中:
vt100.c:1741:警告:从指针转换为不同大小的整数
vt100.c:1805:警告:从指针转换为不同大小的整数
上述每一行代码都是相同的:
*pto++ = 'a' + ((int) fch % 25);
如果需要,我可以链接整个文件,只是不知道在哪里上传它。
我猜你正试图编译由不知道或不关心64位系统上C语言的可移植性问题的人编写的32位代码。
问题是将指针转换为不能表示其值的整数是未定义的行为。 见C11 6.3.2.3§6:
任何指针类型都可以转换为整数类型。 [...]如果结果不能用整数类型表示,则行为是未定义的。
可移植代码将会使用cast到uintptr_t
(或C99之前的size_t
)而不是int
。
显然,指针所保存的地址被用作随机性的来源来获取任意小写字母(我认为Mints97不太可能是正确的,作者只是忘记了对指针的引用,但没有更多的代码,没有人可以肯定地说)。
如果你忽略了这个警告,那么原则上,代码可能实际上在可引发整数溢出信号的架构上爆炸。 更可能的情况是一个可能无害的错误(取决于结果的使用方式):如果(int)fch
碰巧是负数,您可能会得到一个特殊字符或大写字母,而不是小写字母。
如果没有变量声明,我不能说更多,但是当您将指针变量转换为非指针类型时(例如, void *
to int
),通常会发生此错误。 在你的代码中,问题很可能出现在(int) fch
:fch是一个指针,你试图将它转换为int
。 如果你想提取fch
指向的值,请尝试使用(int) *fch
,例如
*pto++ = 'a' + ((int)*fch % 25);
链接地址: http://www.djcxy.com/p/28381.html
上一篇: warning: cast from pointer to integer of different size
下一篇: code snippet warning: cast to pointer from integer of different size