【发布时间】:2012-10-10 14:53:54
【问题描述】:
在Unix命令行中,我需要使用输入重定向来指定输入文件:
./a.out < filename
这是我的源代码:
int main(int argc, char *argv[]) {
char fileName[30];
fgets(fileName, sizeof fileName, stdin);
printf("%s\n", fileName);
}
程序打印一个整数而不是文件名。如果我使用scanf("%s", fileName);,我会得到相同的结果
我的 google-fu 让我失望了。我做错了什么?
编辑:需要使用输入重定向(特别是<),所以命令行参数不是一个选项。但是,我不需要真正知道文件名,我只需要从文件中读取换行符分隔的整数。看来我问错问题了。
【问题讨论】:
-
也许“文件名”恰好以只有一个数字的行开头?
-
您是 (1) 尝试使用标准输入读取名为 'filename' 的文件的内容,还是 (2) 尝试读取文件的名称,然后您将使用 open() 并读取文件 i/o?
-
@nos 这是我的误解。我认为
<会将命令行的其余部分读取为标准输入,此时我必须打开文件并从中读取。但是,<运算符会打开文件并将其内容视为标准输入的输入。我把问题复杂化了。
标签: c unix redirect scanf fgets