我有一个关于使用memcpy()函数的查询。我编写了下面的程序,它编译但不打印输出。 .exe打开并崩溃。我正在使用代码块作为我的IDE使用GNU GCC编译器。
int main()
{
char a[]= "This is my test";
char *b;
memcpy(b,a,strlen(a)+1);
printf("After copy =%s\n",b);
return(0);
}
但是,如果我将数组* b更改为b [50],它可以正常工作!!我不明白为什么。
请提供您的建议!
谢谢!
答案 0 :(得分:4)
您的指针b
未初始化。它指向内存中的一些随机位置。因此,当您将内容复制到b
所指向的内存中时,可能会发生不好的事情。
你需要初始化它;也许用malloc()
为它分配一些内存。
char *b = malloc(strlen(a) + 1);
然后在你完成后释放它。
free(b);
答案 1 :(得分:2)
你很幸运当你使用指针时没有崩溃 - 它应该有。
复制内存时,必须先分配目标。如果使用char b[50]
,则在堆栈上为b
分配50个字节。如果您使用char *b
,则尚未分配任何内容,通常应使用malloc
:b = malloc(50);
之类的内容进行分配。
使用malloc它会起作用,但是你不应该忘记用free(b);
释放那个记忆。
如果在堆栈上分配了内存,则会自动释放。