如何从标准输出中读取以下信息?
Fmail@yasar.com\0Tketo@keeto.com\0Tmail@lima.com\0\0
我想要完整的信息,包括 \0
字符。
使用这样的代码:
string s;
fstream fs("/dev/stdout", fstream::in);
fs >> s;
如果我将 s
写入文件,我会得到以下输出:
Ftest555@itap.gov.trTislam.yasar@inforcept.comTaa@test.comTbb@test.com
所有 \0
和 \0\0
都丢失了。
我该怎么做?
最佳答案
这只是在您的 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;
总是有效。但是,构建一个 std::string
来自 C 字符数组在空字节处停止,因此您必须使用不同的构造函数:
char cstr[] = { 'H', 'e', 0, 'l', 'l', 'o', 0 };
std::string s1(cstr); // wrong, gives you "He"
std::string s2(cstr, sizeof(cstr)); // correct
关于c++ - 从标准输出(C++)获取信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7725619/