首页 > 解决方案 > 在 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

为什么会这样?

标签: c++path

解决方案


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

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

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

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

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


推荐阅读