c++ - 从标准输出(C++)获取信息?

标签 c++ file iostream

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

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/

相关文章:

java - 构造大小为 N 的 1 和 -1 的数组 A,使得所有 A[i]*A[j] 的总和为最小且为正。 1 <= 我 < j <= N

c - 如何在 C 中读取由 { , , } 格式分隔的数字的整个文件?

java - 文件中已写入异常字符

c++ unget on fstreams是否安全

c++ - 将 Uint8(浮点 AUDIO_F32)转换为 int16_t(16 位 PCM)

c++ - 为什么有些运算符只能作为成员函数重载,其他的作为友元函数重载,而其余的则两者都重载?

java - 使用 Java 比较两个文件并单独存储有用信息

让 cin 读取返回字符的 C++

c++ - ostream 链接,输出顺序

c++ - 隔离堆栈粉碎错误的工具