我想了解为什么这段代码不会崩溃:
iter
我虽然写的是不是过程的记忆。因为我们只为char *分配了1个字节,而且我们写的不止这些。
有人可以解释一下吗?
提前致谢。
答案 0 :(得分:3)
为字符串分配足够的空间。
#include <stdio.h>
#include <string.h>
int main()
{
char * a;
a = (char *)malloc(32);
strcpy(a, "example");
free(a); // don't forget to free
}
<强>解释强>
example
+ '\0'
)。阅读有关缓冲区溢出的文章。
重要:强>
如果您不知道输入大小(现在我们知道&#34;示例&#34;是7 + 1字节)
您应该使用strncpy
来指定可以复制的最大字节数。
有一个函数strdup
复制字符串。与allocation
+ strcpy
相同。
答案 1 :(得分:2)
您的分配器可能会为低于特定阈值的请求分配固定大小的小块。我不会感到惊讶你有8个字节,所以strcpy
无故障地工作