如何访问输入文件?命令行重定向文件未出现在argv中的疑问
问题解答
为什么seznam.txt不在argv里?
outDebug.exe hello <seznam.txt里的<是命令提示符的输入重定向符,不是传递给程序的命令行参数。命令提示符会先帮你打开seznam.txt,把这个文件的内容直接作为程序的标准输入(stdin),再启动你的程序。所以这个文件名不会被放到argv数组里,程序自然看不到它。
怎么访问这个文件的内容?
你不需要手动打开这个文件,直接从标准输入读取内容即可,用C语言里的fgets、scanf、getchar等标准输入函数都可以。比如修改你的代码如下:
#include <stdio.h> int main(int argc, char **argv) { int i = 0; for (i = 0; i < argc; i++) { printf("argv[%d] = %s\n", i, argv[i]); } printf("argc = %d\n", argc); // 读取重定向的文件内容 char buffer[256]; printf("\n文件内容:\n"); // 循环读取直到文件结束 while (fgets(buffer, sizeof(buffer), stdin) != NULL) { printf("%s", buffer); } return 0; }
运行同样的命令outDebug.exe hello <seznam.txt,程序就会输出文件里的内容了。
额外说明
如果你希望把文件名作为命令行参数传递给程序(也就是让它出现在argv里),那应该去掉重定向符,直接写成:outDebug.exe hello seznam.txt
这时argc会变成3,argv[2]就是seznam.txt,你需要在程序里用fopen(argv[2], "r")手动打开文件读取内容。
内容的提问来源于stack exchange,提问作者Dark
相关产品推荐
相关产品推荐

