gpt4 book ai didi

c - strcpy 函数行为

转载 作者:行者123 更新时间:2023-11-30 21:31:41 24 4
gpt4 key购买 nike

我运行了以下程序:

#include<stdio.h>
#include<string.h>
#include<malloc.h>
int main()
{
char *p, *q;
p = (char*)malloc(1);
q = (char*)malloc(25);
strcpy(p, "abcd");
strcpy(q,"efgh");
strcat(p,q);
printf("%s",p);
return 0;
}

我原以为它会给出错误“段错误”。但它却将输出打印为:

abcdefgh

我不知道它是如何工作的,因为 p 只分配了 1 个字节,而我们正在复制一个需要更多空间的字符串。这是正确的行为吗?

OS: windows 7
Compiler: mingw C compiler

最佳答案

当您使用 malloc 分配 1 个字节的内存时,malloc 实际上会向内核请求大约 134k 字节的内存,并将 1 个字节分配给变量,并保留剩余的内存以供将来使用,这样当您下次执行 malloc 时,您将从保留中获得地址。并且保留中的所有地址都是有效的,因此您不会遇到任何段错误。如果你检查 p 和 q 的地址,你就会明白为什么它会这样打印。

关于c - strcpy 函数行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26357904/

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