为什么c中存在分段错误,以及如何使其工作


#include "stdio.h"
void save(char* savefile, char ch);
int main()
{
char* savefile = {0};
char ch;
scanf("%c", &ch);
printf("%sn", savefile);
return 0;
}
void save(char* savefile, char ch)
{
savefile[strlen(savefile)] = ch;
}

所以我试图制作一个程序来保存我键入的内容。我不明白为什么它不起作用。我猜更改保存文件是最麻烦的部分。

主要问题是savefile是一个初始化为NULL的指针,因此当您调用printf("%sn", savefile);时,会传递一个NULL指针。然后printf取消引用NULL指针,就会出现崩溃。

相反,您希望savefile是一个字符数组,这样它就可以容纳一个C风格的字符串。

您的代码有点奇怪,因为您从未调用函数save。也许你想要这样的东西:

#define MAX_LEN 32
int main()
{
char savefile[MAX_LEN + 1] = {0};   // Make savefile an array of
// (MAX_LEN + 1) chars. All 
// initialized to zero
char ch;
scanf("%c", &ch);
save(savefile, ch);                 // Call the function
printf("%sn", savefile);
return 0;
}
void save(char* savefile, char ch)
{
size_t len = strlen(savefile);
if (len < MAX_LEN )
{
savefile[len] = ch;
}
}

因为char数组为NULL

您使用值为NULL的char数组调用了printf,导致了未定义的行为和分段错误。首先,给savefile一些有效的值,然后重试,它应该可以工作。

相关内容

  • 没有找到相关文章

最新更新