首页 > 其他分享 >关于CSAPP练习题 3.46 E. 的一点笔记(也许是勘误?

关于CSAPP练习题 3.46 E. 的一点笔记(也许是勘误?

时间:2022-08-17 22:00:00浏览次数:138  
标签:练习题 3.46 CSAPP gets 勘误 malloc NULL

关于CSAPP练习题 3.46 E. 的一点笔记

先放原题

这次,我们主要关注E小问:

习题及答案中提到函数存在两处错误:

对malloc的调用应该以strlen(buf) + 1作为它的参数,而且代码还应该检查返回值是否为NULL。

——参考自csapp第三版第12次印刷,p240

但是在勘误(见 https://csapp3e.gitee.io/yiligong_homepage/csapp3e/index.html )中提到

代码还应该检查返回值是否为NULL

修改为> 代码还应该检查gets的返回值,确保它不为NULL

这让我有点在意。

后面查证了一下,首先malloc()函数在分配失败的时候会返回NULL,如果不加检查,直接向strcpy()src中传入空指针会引发错误,书上原本的答案肯定没问题

那么现在关注一下gets()函数:这个危险的函数我没有查到太多的资料,目前查到的部分提到gets()在读取失败和“没有读入内容就遇到文件结尾(EOF)”时会返回NULL,并且此种情况下可能不会改变原本gets()函数写入目的地的值——同时本题给出的代码中,buf数组并非初始化,可能存在内存脏数据,这时使用strlen可能会读取内存脏数据,显然也是我们不允许的。

故推测本题E的题干应订正为3处错误,包含一处malloc函数参数过小和两处指针未进行空指针检查

标签:练习题,3.46,CSAPP,gets,勘误,malloc,NULL
From: https://www.cnblogs.com/kkkah/p/16596876.html

相关文章

  • 第三周练习题
    一,代码识别,写出结果,并分析原因(function(){returntypeofarguments; })();console.log( typeofg())报错因为g只在函数体内才可见命名的函数表达式(functi......
  • 第四章 1 数据类型 - 数字型 练习题
    第四章1数据类型-数字型练习题基础知识1\表达式int("123",16)的值为:2912\表达式int("123",8)的值为:833\表达式int("123")的值为:1234\表达式int("101",2)的值......
  • 第三章 4 流程控制 练习题
    第三章4流程控制练习题基础知识1、python关键字elif表示*和*两个单词的缩写else和if2、在循环语句中,语句的作用是提前结束本层循环break3、在循环语句......
  • 第三周练习题
    一、代码识别(填出下列结果并讲出为什么)1、(function(){ returntypeofarguments; })();Object,(因为arguments是一个伪数组对象)2、varf=functiong(){return2......
  • mysql基础练习题
    mysql基础练习题 test11、创建emp表,设计字段为id,name,age,sex,salary(工资),resume(履历),time(入职时间)。2、往表中添加数据如下:insertintoemp(name,age,sex,s......