我有一个程序可以从文件或键盘读取输入。我找到了一种方法来决定是从文件还是从键盘插入输入。
我需要以简单的方式实现该决定,因为我不想为每种类型的输入复制我的代码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)
答案 0 :(得分:5)
if(arg == 1) /* == */
{
....
应该照顾你的大部分麻烦。 arg = 1
将arg
设置为1并始终成功,因此永远不会使用fp=stdin;
分支。
此外,您的问题未显示arg
的分配方式。它是main()
的第一个参数吗?如果是这样,那通常称为argc
。如果您使用传统名称,其他开发人员将更容易理解您的代码。
<强>编辑强>
正如@MayurK所指出的,使用1 == arg
而不是arg == 1
将有助于编译器保护您免受此攻击。
正如@EdHeal所指出的,一些编译器可以选择检查if(arg=1)
,因为它很少是你想要的。在海湾合作委员会中,-Wint-in-bool-context
和-Wparentheses
很有用(或者,更好的是,只需启动-Wall
!)。