0

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

./prog <in1 <in2

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

程序调用这个函数两次:

void print() {
    char buf[4096];

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

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

4

1 回答 1

0

如果\n文件中没有in1,则strchr没有可查找的内容,并且将返回NULL.

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

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

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

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

./prog < `cat in1 in2`
于 2013-05-30T23:29:39.260 回答