在 Windows 命令行中运行.exe在使用 2 种相同方式执行时会产生不同的输出



我在项目的子目录中有以下C++代码:/storage/app/users/user1/12/12.cpp

#include <bits/stdc++.h>
using namespace std;
main(){
    int x,y,z,t;
    freopen("input.txt","r",stdin);
    cin >> x >> y >> z >> t;
    cout << x <<" "<< y <<" "<<z <<" "<<t;
}

然后将此代码编译为.exe文件:/storage/app/users/user1/12/12.cpp.exe.

input.txt 文件与 2 个给定文件位于同一目录中,并且包含

1 2 3 4

当我尝试运行">cd storage/app/users/user1/12 ; ./12.cpp.exe"时,它产生了预期的输出:1 2 3 4

但是当我尝试直接运行它时:"./storage/app/users/user1/12/12.cpp.exe",它产生了如此奇怪的输出:0 4254553 0 1

为什么会这样?

在失败的情况下,当前工作目录不是您所期望的。

您正在使用相对路径加载输入文件,该路径无法找到该文件,但您没有检查返回值 freopen() 是否有错误。

cin读取的变量未初始化,并且在使用这些变量之前不会检查operator>>结果是否存在错误。它们在出错时保持不变。这就是为什么你在输出上获得随机值的原因。

您需要使用输入文件的绝对路径,而不是相对路径。

由于输入文件与可执行文件位于同一目录中,因此您可以首先检索可执行文件的完整路径字符串(通过 main()argv[0] 参数,或通过 Windows 上的 GetModuleFileName() 等系统调用(,修改它以将12.cpp.exe文件名部分替换为 input.txt,然后使用该完整路径字符串加载输入文件。

相关内容

  • 没有找到相关文章

最新更新