从二进制文件中抓取文本时,为什么 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();
#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();