gpt4 book ai didi

c++ - 分配给 char* 的内存

转载 作者:行者123 更新时间:2023-11-30 19:57:47 25 4
gpt4 key购买 nike

我想了解为什么这段代码不会崩溃:

#include<studio.h>
#include<string.h>
main()
{
char *a;
a=(char *)malloc(1);
strcpy(a, "example");
}

我虽然我们正在写入不是进程的内存,因为我们只为 char * 分配了 1 个字节,而且我们写入的字节数不止这个。

有人可以解释一下吗?

提前致谢。

最佳答案

为字符串分配足够的空间。

#include <stdio.h>
#include <string.h>
int main()
{
char * a;
a = (char *)malloc(32);
strcpy(a, "example");
free(a); // don't forget to free
}

说明:

  • 您分配了复制 7+1 的 1 个字节(示例 + '\0')。
  • 您尝试访问未分配的内存。

阅读有关缓冲区溢出的文章。

重要:

如果您不知道输入大小(现在我们知道“示例”是 7+1 字节)您应该使用 strncpy 指定可以复制的最大字节数。

有一个函数strdup可以复制字符串。与分配 + strcpy相同。

关于c++ - 分配给 char* 的内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38418415/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com