警告:从指针转换为不同大小的整数

试图在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