从二进制文件中抓取文本时,为什么 xdg_vtnr=8 我的结果?

When grabbing text from a binary file, why is xdg_vtnr=8 my result?

#include <iostream>
using namespace std;

int main(int argc, char *argv[])
{
    cout << argv[2] << endl;
}

这只是我正在编写的程序的开始,但我正在 已经卡住了。它只是从我拥有的二进制文件中读取数据 保存在与该程序相同的目录中。我编译并 运行 ./a.out < 文件名的程序,程序应该 将文件中的任何内容打印到标准输出。我尝试了不同的方式 通过打开文件并使用 getline 获取数据,以及数据 收到了完美。我只是想知道为什么第一种方法 没有按预期工作,我可以做些什么来解决这个问题。

这里有一些错误主要是由于参数和输入流之间的混淆。

argv 包含 arguments/parameters 作为程序执行时传递给程序的 c 字符串数组,argc 是参数的数量。如果你要 运行 ./a.out filename 你应该看到

argc = 2
argv[0] = "/<current path>/a.out"
argv[1] = "filename"

但是你 运行 ./a.out < filename 没有参数和重定向。所以你访问 argv[2] 是未定义的行为,看起来你得到了垃圾值 "xdg_vntr=8"。不幸的是,我无法充分解释为什么这是你的结果,因为它是未定义的,并且将依赖于编译器和系统的实现。

这样做 < filename 告诉 shell 运行 使您的程序打开 filename 并将其定向到程序的标准输入流(A.K.A . std::cin) 您可以像这样将输入流缓冲区直接发送到输出流 std::cout << std::cin.rdbuf();