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

时间:2014-05-05 21:18:47

标签: c memory string pointers

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

例如,如果我试试这个:

char *pointer;
strcpy(pointer,"Hello, World!\n");
printf(pointer);

我得到了这个输出:

Segmentation Fault

但如果我试试这个:

char *pointer = "Hello, World!\n");
printf(pointer);

我明白了:

Hello, World!

我的问题是它为什么不与strcpy合作。 这些功能总体上也是如此。

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

如果有人能够解释记忆中发生的事情,那将是一件好事,这样我就可以更好地了解这一点。

2 个答案:

答案 0 :(得分:6)

char* pointer只是为您提供了一个用于访问内存位置的变量。你还没有分配任何内存,所以当你执行strcpy时,你正在写任何随机/未定义的值pointer

您需要执行以下操作:

char* pointer = calloc(LEN);
if (pointer)
{
    strcpy(pointer, "Hello World");
    printf(pointer);
    free(pointer);
}

答案 1 :(得分:1)

" strcpy"的第一个参数应该指向内存中的可用位置。在你的第一个源代码中,你没有初始化"指针"任何事情。您应该首先对其进行初始化,例如将其声明为最大长度的字符数组:

char myArray[42]; // where 42 represents the maximum capacity