gpt4 book ai didi

c - 未在命令行上指定输入文件时出现段错误

转载 作者:行者123 更新时间:2023-11-30 14:31:46 25 4
gpt4 key购买 nike

我正在编写一个程序,该程序从作为争论传递的文件中读取,或者如果没有给出争论则从标准输入中读取。代码在传递文件时运行良好,但在没有传递文件时出现段错误。如果给出了文件,我基本上会在 argv[1] 上调用 fopen,但如果没有给出文件,我会调用:

f = fopen("stdin", "r");

这是将 stdin 作为文件打开的正确语法吗?

最佳答案

当你启动一个程序时,main()函数并不是第一个执行的事情。get 被调用,在 main() 函数调用之前发生了很多事情叫。其中之一是打开 stdin、stdout 和 stderr。在一般来说,您无需担心操作系统如何执行此操作的细节,您只是可以传达,当执行 main() 时,这些流是打开的,你可以使用它们。

因此,对于您的情况,您可以这样做:

#include <stdio.h>

int main(int args, char **argv) {
FILE *fp;

if(args == 1) {
fp = stdin;
} else {
fp = fopen(argv[1], "r");

if(fp == NULL) {
fprintf(stderr, "Unable to open %s for writing\n", argv[1]);
return 1;
}
}

// do your read operations on fp

if(fp != stdin) {
fclose(fp);
}

return 0;
}

因此,当您不带参数调用程序时,将使用 stdin,否则将使用使用文件。

你的代码崩溃的原因是因为

f = fopen("stdin", "r");

尝试打开一个字面上称为stdin的文件,您很可能不会这样做有。 fopen 将返回 NULL 并且您可能不会检查它。如果你尝试使用需要 FILE* 指针但传递 NULL 的函数,然后你很可能会遇到段错误。

关于c - 未在命令行上指定输入文件时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60122939/

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