因为
#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
一些有效的值,然后重试,它应该可以工作。