我正在学习一些新东西,但被困在一个简单的 strcpy 操作上。 我不明白为什么第一次打印时可以,但第二次却不行。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
char *name;
char *altname;
name=(char *)malloc(60*sizeof(char));
name="Hello World!";
altname=name;
printf("%s \n", altname);
altname=NULL;
strcpy(altname,name);
printf("%s \n", altname);
return 1;
}
最佳答案
问题从这里开始:
name=(char *)malloc(60*sizeof(char));
name="Hello World!";
您用字符串文字替换了 malloc
返回的值。
您泄漏了内存(因为您无法重新获得
malloc
返回的指针值)。所有对malloc
的调用都与对free
的相应调用相匹配。由于该指针值消失了,因此使用该指针值调用free
的机会也消失了。您进一步写入 NULL 指针,这是未定义的行为(在您的情况下,产生了段错误)。
关于c - strcpy 段错误 C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25531341/