我已经编写了此代码以获取用户的输入并将其保存为文本文件。
int main(){
FILE *fp;
fp = fopen("rahiv.txt", "w");
char s[80];
char a;
gets(s);
a = s ;
fputs(s, fp);
}
但是,如果我想写下fputs部分,它给我分割错误,我如何typecast get get get get get gets()function的返回值并修复此问题!
int main(){
FILE *fp;
fp = fopen("rahiv.txt", "w");
char s[80];
fputs(gets(s), fp);
}
这是一些不安全的代码。我将尝试按顺序解决问题,并希望在此过程中的某个地方回答您的问题。
1)您需要确保文件成功打开。这不太好,例如Java/C#/Python/其他高级语言,它会引发异常。您必须检查if(fp == NULL) { /*handle error*/ }
2)您正在尝试将变量 a
和 s
等同于不同的类型,而不是等效。char s[80]
在堆栈上分配了一个长度的字符80字节。看起来s
是char
类型的,但实际上是char*
类型的,因此Line a = s
...好吧,我不确定它的作用。
3)gets
不仅可以返回字符串。从文档
成功,该函数返回str。如果文件结束是 在尝试读取字符时遇到的EOF指标是 设置(feof)。如果在读取任何字符之前发生这种情况, 返回的指针是无效的指针(并且Str的内容仍然存在 不变)。如果发生读取错误,则错误指示器(Ferror)为 设置和无效指针也返回(但内容指向 str可能已更改)。
尝试将返回值直接传递到 fputs
可能会如果您幸运并且一切都正确,但是如果有错误,它将爆炸。在更高级别的语言中,有很多诱惑可以将方法直接传递到另一种方法的参数中,但是在C中,由于没有尝试/捕捉,通常会结束不良,因此通常将错误作为特殊情况返回返回值。不要试图使其更紧凑,偏爱较长的代码,然后将所有适当的测试用例放入错误!
4)您永远不会关闭文件。请务必致电fclose(fp);
,否则您将导致内存泄漏,如果您的程序崩溃,可能会导致某些不希望的行为,从而导致您编写的数据丢失。