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


#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
    cout << argv[2] << endl;
}

这只是我正在编写的程序的开始,但我正在 已经卡住了。它只是从我拥有的二进制文件中读取数据 保存在与此程序相同的目录中。我编译并运行 带有./a.out

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

argv包含参数/参数作为执行时传入程序的 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并将其定向到程序的标准输入流(又名 std::cin ) 您可以将输入流缓冲区直接发送到输出流,如下所示std::cout << std::cin.rdbuf();

最新更新