You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何访问输入文件?命令行重定向文件未出现在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 14:05:21