64位系统上的老程序

之前写的某小程序在新的64位系统上seg fault了……
gdb之后,发现是getenv()返回了一个很小的负数…… 但是getenv()返回类型是char*,应该或者返回地址或者返回NULL啊……
编译的时候有个warning,说将int转化为了pointer……

其实就是忘了#include 了…… 于是getenv()没有声明过,默认成了返回int
32位系统上无所谓,反正int和char*一样大。64位就不一样了,int只有32位。
于是,在没有声明的情况下,返回值只拿到了后32位…… 再赋给char*自然也不行。

所以c这个没有声明直接可以用的特性有什么好的,而且连个没声明的警告也没有(貌似新的gcc会给……),不如直接编译失败……

2 Comments

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.