小编Deg*_*egH的帖子

为什么 strcpy 的这种使用被认为是不好的?

我发现了以下一段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)

评论更新:

  • “BAD”标记不精确,代码还不错,效率不高是的,有风险(如下)是的,
  • 为什么有风险?+1在 strlen() 调用之后需要安全地分配堆上的空间,该空间也将保留字符串终止符 ( '\0')

c buffer strcpy

2
推荐指数
1
解决办法
263
查看次数

标签 统计

buffer ×1

c ×1

strcpy ×1