什么是良好的编程习惯?可以看下这段代码,有没有什么问题?
#include#include int main() { char *s = (char *)malloc(1024); char ch; int i = 0; while ((ch = getchar()) != ' ') { *(s + i++) = ch; } printf("%s ", s); return 0; }
代码很简单,使用 malloc 申请一段堆内存,假设内存空间足够大。
通过 getchar 配合 while 循环,从标准输入获取一个字符串,直到遇到换行符结束。
最后就是把获取的字符串输出。
乍一看,好像程序没什么问题。
然后把程序运行起来,多测试几遍,也确实没发现问题。
但是如果把代码换个平台,比如放到了 Windows 上,使用 DEV C++ 编译器,再次运行,程序好像出了问题。
问题就出在了 malloc 函数上面。
malloc 用于申请堆内存,但是堆内存里面的内容是不确定的。
刚才我们用的两个编译器,gcc 默认把堆内存初始化成了 0,所以使用 getchar 获取多个字符后,最后是 �,是个标准的字符串。
而使用 dev C++,最后一个字符的后面并不是 �,输出也就出了问题。
良好的编程习惯就是使用内存的时候尽量初始化,如果代码这样写,不管移植到哪个平台,都不会出问题。
全部0条评论
快来发表一下你的评论吧 !