gpt4 book ai didi

C:出现段错误

转载 作者:行者123 更新时间:2023-11-30 20:53:43 25 4
gpt4 key购买 nike

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

int main(){
FILE *fp;
fp = fopen("rahiv.txt", "w");
char s[80];
char a;
gets(s);
a = s ;
fputs(s, fp);
}

但是如果我想像下面这样编写 fputs 部分,它会给我段错误,我如何类型转换 gets() 函数的返回值并修复这个问题!

int main(){
FILE *fp;
fp = fopen("rahiv.txt", "w");
char s[80];
fputs(gets(s), fp);
}

最佳答案

这是一些不安全的代码。我会尝试按顺序解决问题,并希望在此过程中的某个地方回答您的问题。

1) 您需要确保文件已成功打开。这不像 Java/C#/Python/其他高级语言那样会抛出异常。您必须检查 if(fp == NULL) {/*处理错误*/}

2) 您试图将变量 as 等同起来,它们是不同类型且不等价的。 char s[80] 在堆栈上分配一个 80 字节长的字符数组。看起来 s 的类型为 char,但实际上它的类型为 char*,因此行 a = s... 好吧,我不确定它的作用。

3) gets 可以返回的不仅仅是字符串。 From the docs

On success, the function returns str. If the end-of-file is encountered while attempting to read a character, the eof indicator is set (feof). If this happens before any characters could be read, the pointer returned is a null pointer (and the contents of str remain unchanged). If a read error occurs, the error indicator (ferror) is set and a null pointer is also returned (but the contents pointed by str may have changed).

尝试将返回值直接传递到fputs可能如果你幸运并且一切正确的话会起作用,但是如果出现错误,它就会崩溃。在高级语言中,很容易将一个方法的结果直接传递到另一个方法的参数中,但在 C 中,由于没有 try/catch,这通常会以很糟糕的方式结束,因此错误通常会作为以下特殊情况返回:返回值。不要试图使其更紧凑,而是选择更长的代码并放入所有正确的错误测试用例!

4) 你永远不会关闭文件。请务必调用 fclose(fp);,否则,如果您的程序崩溃,您将导致内存泄漏,并可能出现一些不良行为,从而导致您写入的数据丢失。

关于C:出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46165864/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com