养成良好的编程习惯|堆内存初值不一定是0

描述

  什么是良好的编程习惯?可以看下这段代码,有没有什么问题?

#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++,最后一个字符的后面并不是 �,输出也就出了问题。

良好的编程习惯就是使用内存的时候尽量初始化,如果代码这样写,不管移植到哪个平台,都不会出问题。
 

 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分