我是学习C语言的新手,我对指针有疑问。
例如,如果我试试这个:
char *pointer;
strcpy(pointer,"Hello, World!\n");
printf(pointer);
我得到了这个输出:
Segmentation Fault
但如果我试试这个:
char *pointer = "Hello, World!\n");
printf(pointer);
我明白了:
Hello, World!
我的问题是它为什么不与strcpy
合作。
这些功能总体上也是如此。
第一个源代码与第二个源代码有什么区别?
如果有人能够解释记忆中发生的事情,那将是一件好事,这样我就可以更好地了解这一点。
答案 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