c中的memcpy()函数用法

时间:2014-06-06 10:08:25

标签: c memcpy

我有一个关于使用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],它可以正常工作!!我不明白为什么。

请提供您的建议!

谢谢!

2 个答案:

答案 0 :(得分:4)

您的指针b未初始化。它指向内存中的一些随机位置。因此,当您将内容复制到b所指向的内存中时,可能会发生不好的事情。

你需要初始化它;也许用malloc()为它分配一些内存。

char *b = malloc(strlen(a) + 1);

然后在你完成后释放它。

free(b);

答案 1 :(得分:2)

你很幸运当你使用指针时没有崩溃 - 它应该有。

复制内存时,必须先分配目标。如果使用char b[50],则在堆栈上为b分配50个字节。如果您使用char *b,则尚未分配任何内容,通常应使用mallocb = malloc(50);之类的内容进行分配。

使用malloc它会起作用,但是你不应该忘记用free(b);释放那个记忆。

如果在堆栈上分配了内存,则会自动释放。