从stdin或文件输入,C

时间:2016-10-21 18:16:00

标签: c file input stdin

我有一个程序可以从文件或键盘读取输入。我找到了一种方法来决定是从文件还是从键盘插入输入。

我需要以简单的方式实现该决定,因为我不想为每种类型的输入复制我的代码2次。

我尝试了类似下面的代码,但仅适用于输入文件(arv == 1),而它从stdin中获得了分段错误。

调试arg == 0

后出现

错误

(_IO_fgets (buf=0xbffffaac "\030\031\023", n=100, fp=0x0) at iofgets.c:52)

代码:

FILE *fp;

if (arg = 1)
    fp = fopen (operationfile, "r");
else
    fp = stdin;

while (fgets(buffer, sizeof(buffer), fp) != NULL)

有快速的方法吗?

1 个答案:

答案 0 :(得分:5)

if(arg == 1) /* == */
{
    ....

应该照顾你的大部分麻烦。 arg = 1arg设置为1并始终成功,因此永远不会使用fp=stdin;分支。

此外,您的问题未显示arg的分配方式。它是main()的第一个参数吗?如果是这样,那通常称为argc。如果您使用传统名称,其他开发人员将更容易理解您的代码。

<强>编辑

  • 正如@MayurK所指出的,使用1 == arg而不是arg == 1将有助于编译器保护您免受此攻击。

  • 正如@EdHeal所指出的,一些编译器可以选择检查if(arg=1),因为它很少是你想要的。在海湾合作委员会中,-Wint-in-bool-context-Wparentheses很有用(或者,更好的是,只需启动-Wall!)。