在char*指针上尝试strcpy时出现C分段错误

jos*_*ppa 0 c memory string pointers

我是学习C语言的新手,我对指针有疑问.

例如,如果我试试这个:

char *pointer;
strcpy(pointer,"Hello, World!\n");
printf(pointer);
Run Code Online (Sandbox Code Playgroud)

我得到这个输出:

Segmentation Fault
Run Code Online (Sandbox Code Playgroud)

但如果我试试这个:

char *pointer = "Hello, World!\n");
printf(pointer);
Run Code Online (Sandbox Code Playgroud)

我明白了:

Hello, World!
Run Code Online (Sandbox Code Playgroud)

我的问题是为什么它没有合作strcpy.这些功能总体上是相同的.

第一个源代码与第二个源代码有什么区别?

如果有人能够解释记忆中发生的事情会很好,这样我就可以更好地了解这一点.

Jam*_*mes 6

char* pointer只是给你一个用来访问内存位置的变量.你还没有分配任何内存,所以当你这样做时,strcpy你正在写任何随机/未定义的值pointer.

你需要做一些事情:

char* pointer = calloc(LEN);
if (pointer)
{
    strcpy(pointer, "Hello World");
    printf(pointer);
    free(pointer);
}
Run Code Online (Sandbox Code Playgroud)