【问题标题】:Using files as program input when program asks for input multiple times当程序多次要求输入时使用文件作为程序输入
【发布时间】:2013-05-31 07:29:39
【问题描述】:

我有一个程序要求用户输入两次。我想使用文件为程序提供输入,但无法弄清楚。由于它要求输入两次,我无法将文件通过管道传输到程序,所以这就是我正在尝试的:

./prog <in1 <in2

但程序因分段错误而崩溃。

程序调用这个函数两次:

void print() {
    char buf[4096];

    read(0, buf, sizeof buf);
    *strchr(buf, '\n') = 0;
    puts(buf);      
}

输入文件中只有几个字符。请帮忙!

【问题讨论】:

  • 它如何要求用户输入?你在那里做的管道只是重定向标准输入,我实际上不知道如果你指定其中两个会发生什么:S

标签: c input


【解决方案1】:

如果文件in1 中没有\n,则strchr 将找不到任何内容,并将返回NULL

接下来,您的代码将尝试取消引用 NULL,并导致 seg-fault。
这很可能是您的麻烦的根源。

为了防止出现\n 不存在的情况,我建议使用以下代码:

char* p = strchr(buf, '\n');
if (p != NULL) {
    *p = '\0';
}
puts(buf);      

至于直接从多个文件输入,如果你在 *nix 系统上,试试这个:

./prog < `cat in1 in2`

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-16
    • 1970-01-01
    相关资源
    最近更新 更多