C:获取细分错误



我已经编写了此代码以获取用户的输入并将其保存为文本文件。

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)您正在尝试将变量 as等同于不同的类型,而不是等效。char s[80]在堆栈上分配了一个长度的字符80字节。看起来schar类型的,但实际上是char*类型的,因此Line a = s ...好吧,我不确定它的作用。

3)gets不仅可以返回字符串。从文档

成功,该函数返回str。如果文件结束是 在尝试读取字符时遇到的EOF指标是 设置(feof)。如果在读取任何字符之前发生这种情况, 返回的指针是无效的指针(并且Str的内容仍然存在 不变)。如果发生读取错误,则错误指示器(Ferror)为 设置和无效指针也返回(但内容指向 str可能已更改)。

尝试将返回值直接传递到 fputs 可能会如果您幸运并且一切都正确,但是如果有错误,它将爆炸。在更高级别的语言中,有很多诱惑可以将方法直接传递到另一种方法的参数中,但是在C中,由于没有尝试/捕捉,通常会结束不良,因此通常将错误作为特殊情况返回返回值。不要试图使其更紧凑,偏爱较长的代码,然后将所有适当的测试用例放入错误!

中!

4)您永远不会关闭文件。请务必致电fclose(fp);,否则您将导致内存泄漏,如果您的程序崩溃,可能会导致某些不希望的行为,从而导致您编写的数据丢失。

相关内容

  • 没有找到相关文章

最新更新