代码之家  ›  专栏  ›  技术社区  ›  WannabeArchitect

在c中使用freopen打开多个文件++

  •  1
  • WannabeArchitect  · 技术社区  · 7 年前

    我尝试多次使用freopen()来读取和关闭不同的文件。 下面是我在主函数中所做的:

    if (argc != 5) {
        std::cerr << "Wrong format of arguments given." << endl;
        return -1;
    }
    std::string command, command2;
    freopen(argv[1], "r", stdin);
    // do something...
    fclose(stdin);
    freopen(argv[2], "r", stdin);
    freopen(argv[3], "w", stdout);
    while (std::cin >> command) {
        std::cin >> command2;
        // run some function...
    }
    fclose(stdin);
    fclose(stdout);
    

    但事实证明,第一部分, // do something... ,工作正常(从 std::cin 但是第二个while循环似乎没有运行。 输入文件的格式正确,所以我不知道为什么 std::cin >> command 返回false。

    1 回复  |  直到 7 年前
        1
  •  1
  •   cse    7 年前

    直列式 freopen(argv[2], "r", stdin); 您正在尝试重新打开 stdin 标准DIN 直列式 fclose(stdin); 就在那之前。 而且 , 标准DIN 正在关闭后悬空指针 文件 .

    以下是摘录自 www.cplusplus.com :

    如果指定了新的文件名,函数将首先尝试关闭已与流关联的任何文件(第三个参数)并解除其关联。然后,与流是否成功关闭无关,freopen打开filename指定的文件并将其与流关联,就像fopen使用指定模式所做的那样。

    您应该使用 fopen() 关闭后的功能 标准DIN .

    推荐文章