我在项目的子目录中有以下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
,然后使用该完整路径字符串加载输入文件。