从标准输出(c++)中获取信息



如何从标准输出中读取以下信息?

Fmail@yasar.com 0 tketo@keeto.com 0 tmail@lima.com 0

我想要完整的信息,包括字符。

代码如下:

string s;
fstream fs("/dev/stdout", fstream::in);
fs >> s;

如果我把s写入一个文件,我得到这样的输出:

Ftest555@itap.gov.trTislam.yasar@inforcept.comTaa@test.comTbb@test.com

全部丢失。

我该怎么做呢?

这只是在shell中正确处理输出的问题。

想象一下:

cat file_with_nulls

这将鲁莽地将file_with_nulls的内容打印到控制台,当然控制台可能不具备显示不可打印字符的功能。然而,下面的工作:

cat file_with_nulls > otherfile

这将创建一个file_with_nulls的完美副本。

同样适用于您的程序。您可以在标准输出中写入任何您想要的内容。但是不要期望您的终端或控制台使用它做任何有用的事情!相反,将输出重定向到一个文件,一切都很好:

./myprog > output.bin

注意C字符串操作通常不使用空字节,所以在C中你应该使用fwrite()。在c++中,字符串可以包含任何字符,所以std::cout << str;总是有效的。但是,从C字符数组构造std::string会在空字节处停止,因此必须使用不同的构造函数:

char cstr[] = { 'H', 'e', 0, 'l', 'l', 'o', 0 };
std::string s1(cstr);  // wrong, gives you "He"
std::string s2(cstr, sizeof(cstr));  // correct

指定二进制模式:

std::string result;
std::fstream fs( "/dev/stdout", std::fstream::in|std::fstream::binary );
while ( !fs.eof() ) {
  std::string b;
  fs >> b;
  result += b;
}
fs.close();

我用下面创建的文件进行测试:

std::fstream out( "C:\tmp\test1.txt", std::fstream::out );
out.write( "aaanbbbccc", 13 );
out.close();

但是你必须使用迭代器(result.begin(), result.end())来访问数据,因为c_str()调用将在''

上截断

最新更新