私は、ofstreamに文字列とintを書き、ifstreamでその文字列を読み取ろうとしています。私は文字列がnullで終了すると期待しているので、ストリームは文字列がどこで停止し、どこでintが始まるかを知る必要があります。しかし、それは起こっていません - 私はそれを読み返すと、文字列の一部としてintを扱います。どうすればそれを避けることができますか?C++ストリームは、1つの文字列がどこで終わり、次の文字列が始まるかを知ることはできません。
#include <fstream>
#include <string>
int main()
{
std::string tempFile("tempfile.out");
std::ofstream outStream(tempFile); //Tried this both with text
//and with ::bin but get same results
std::string outStr1("Hello");
int outInt1 = 5;
std::string outStr2("Goodbye");
outStream << outStr1 << outInt1 << outStr2;
outStream.close();
std::ifstream inStream(tempFile); //Tried this both with text
//and with ::bin but get same results
std::string inStr1, inStr2;
int inInt1;
inStream >> inStr1; //this reads a string that concats all
//my prev values together!
inStream >> inInt1; //doesn't do what I want since the int was
//already read as part of the string
inStream >> inStr2; //doesn't do what I want
}
文字列と文字列を組み合わせて1つの文字列にするのではなく、文字列と整数を分けることができますか?
ストリームに文字列またはintがありません。物事を区別したい場合は、それを行うためにフォーマットを考案して使用する必要があります。カンマ区切りの値とXMLは2つのアプローチです。他にもあります。 –
ストリームはプロトコルではなく、バイトを送信できるパイプです。 –
しかし、メモリ内の文字列にはヌルターミネータがあります。そのストリームはそのヌルターミネータを保存しませんか? – user2543623