我发现了以下一段C代码,标记为 BAD(又名缓冲区溢出错误)。问题是我不太明白为什么?输入字符串长度在分配等之前被捕获。
char *my_strdup(const char *s)
{
size_t len = strlen(s) + 1;
char *c = malloc(len);
if (c) {
strcpy(c, s); // BAD
}
return c;
}
Run Code Online (Sandbox Code Playgroud)
评论更新:
+1在 strlen() 调用之后需要安全地分配堆上的空间,该空间也将保留字符串终止符 ( '\0')