C 分段故障错误(堆芯转储)

C 分段故障错误(堆芯转储),c,pointers,segmentation-fault,C,Pointers,Segmentation Fault,我在下面的代码中得到分段错误(堆芯转储)错误 请告诉我哪里出了问题 #include "string.h" int main(){ char *str=NULL; strcpy(str,"something"); printf("%s",str); return 0; } 我正在浏览一个网站,在那里我看到了这个问题,并试图编译代码。它说预期的输出应该是(null)。下面是第13个问题的链接最后一个示例在将字符串复制到str之前,您需要为其分配内存 char *str = malloc(10)

我在下面的代码中得到
分段错误(堆芯转储)
错误

请告诉我哪里出了问题

#include "string.h"
int main(){
char *str=NULL;
strcpy(str,"something");
printf("%s",str);
return 0;
}


我正在浏览一个网站,在那里我看到了这个问题,并试图编译代码。它说预期的输出应该是(null)。下面是第13个问题的链接最后一个示例

在将字符串复制到
str
之前,您需要为其分配内存

char *str = malloc(10) // Length of string "Something" + 1  
请注意,在将
NULL
赋值给
str
之后,它没有指向任何地方,如下所示:

[…]空指针肯定不指向任何地方;它不是任何对象或函数的地址


如果
str
不是任何对象的地址,那么怎么可能将任何内容复制到它

在将字符串复制到
str
之前,需要为其分配内存

char *str = malloc(10) // Length of string "Something" + 1  
请注意,在将
NULL
赋值给
str
之后,它没有指向任何地方,如下所示:

[…]空指针肯定不指向任何地方;它不是任何对象或函数的地址

如果
str
不是任何对象的地址,那么怎么可能将任何内容复制到它

#包括
#包括
#包括
int main(){
int size=10;
char*str=NULL;
str=malloc(大小);
strcpy(str,“某物”);
printf(“%s”,str);
}
缩进代码也很重要:$

\include
#包括
#包括
int main(){
int size=10;
char*str=NULL;
str=malloc(大小);
strcpy(str,“某物”);
printf(“%s”,str);
}


缩进代码也很重要:$

您可以在案例中使用malloc或strdup。

您可以在案例中使用malloc或strdup。

您需要让strcpy的第一个参数指向您可以写入的分配内存。将
NULL
作为第一个参数传递往往会导致访问冲突。唯一分配给
str
的值是
NULL
。然后尝试将字符串复制到NULL,然后从NULL打印字符串。“那该怎么办呢?”LightnessRacesinOrbit你怎么会这么想@sehe:因为它非常基本,几乎在一本C语言书的开头就有介绍,并且在这里被问了很多次。然后看看下面的代表结果。@LightnessRacesinOrbit:似乎提问者被一个不好的网站弄糊涂了。请参阅下面关于haccks答案的注释。您需要让strcpy的第一个参数指向您可以写入的已分配内存。将
NULL
作为第一个参数传递往往会导致访问冲突。唯一分配给
str
的值是
NULL
。然后尝试将字符串复制到NULL,然后从NULL打印字符串。“那该怎么办呢?”LightnessRacesinOrbit你怎么会这么想@sehe:因为它非常基本,几乎在一本C语言书的开头就有介绍,并且在这里被问了很多次。然后看看下面的代表结果。@LightnessRacesinOrbit:似乎提问者被一个不好的网站弄糊涂了。见下面关于haccks答案的评论。char*str=malloc(10);str=NULL;strcpy(str,“某物”);仍然给出错误。char*str=malloc(10)//str=NULL;strcpy(str,“某物”);没有错误。为什么?为什么在分配空间后分配
NULL
?你知道
NULL
的用法吗?不完全知道。我只是在读关于空的书。我正在浏览一个网站,在那里我看到了这个问题,并试图编译代码。它说预期的输出应该是(null)。这是链接第13个问题的最后一个例子。@User42;我刚刚访问了那个网站。我建议你远离那个网站。它不是最新的。很多答案都基于Turbo C++的代码编译,现在已经过时了。哎呀!好渔获量:)char*str=malloc(10);str=NULL;strcpy(str,“某物”);仍然给出错误。char*str=malloc(10)//str=NULL;strcpy(str,“某物”);没有错误。为什么?为什么在分配空间后分配
NULL
?你知道
NULL
的用法吗?不完全知道。我只是在读关于空的书。我正在浏览一个网站,在那里我看到了这个问题,并试图编译代码。它说预期的输出应该是(null)。这是链接第13个问题的最后一个例子。@User42;我刚刚访问了那个网站。我建议你远离那个网站。它不是最新的。很多答案都基于Turbo C++的代码编译,现在已经过时了。哎呀!好消息:)