我在C编程中遇到了这个问题:
问题:下面的代码片段中用零填充缓冲区的缺陷是什么?如何解决问题?
char*buf;
buf=malloc(BUFSIZ);
memset(buf,0,BUFSIZ);
我试图找到这个漏洞,但一切都适合我。如果上述C程序有任何缺陷,请告诉我。
答案 0 :(得分:1)
//somewhere
const size_t BUFSIZE = 1000; //or it could be 0!
...
char *buf = NULL;
if (BUFSIZE > 0) {
buf = (char*) malloc(BUFSIZ); //cast is not necessary on most compilers
if (buf == NULL) {
//some error processing
} else {
memset(buf, 0, BUFSIZ);
}
free(buf);
buf = NULL;
}
答案 1 :(得分:0)
首先,malloc返回一个类型为'void'的指针,因此最好将其强制转换为 (char *)。第二件事“malloc”可能会失败,在那种情况下它会返回“NULL”指针,检查这个条件。我确信BUFSIZ是在代码中定义的!