2

私はistream::getを読みましたが、疑問はまだ残っています。私の区切り文字が実際にはNULLの「\0」文字であるとしましょう。この場合はどうなりますか?私が読んだものから:

If the delimiting character is found, it is not extracted from the input sequence and remains as the next character to be extracted. Use getline if you want this character to be extracted (and discarded). The ending null character that signals the end of a c-string is automatically appended at the end of the content stored in s.

「readline」よりも「get」を好む理由は、文字ストリームを「streambuf」に抽出できるためです。

4

2 に答える 2

1

私はあなたの問題をよく理解していません。

msdn Web サイトの get 関数については、次のように書かれています。

いずれの場合も、区切り文字はストリームから抽出されることも、関数によって返されることもありません。対照的に、getline 関数は区切り文字を抽出しますが、格納しません。いずれの場合も、区切り文字はストリームから抽出されることも、関数によって返されることもありません。対照的に、getline 関数は区切り文字を抽出しますが、格納しません。

http://msdn.microsoft.com/en-us/library/aa277360(VS.60).aspx

msdn サイトでは、デリミタはストリームから抽出されておらず、関数によって返されていないことが示されているため、問題はないと思います。

それとも、私はここでポイントを逃していますか?

于 2009-11-05T15:26:50.170 に答える
0

このようなものがある場合、区切り文字は入力ストリームでスタックしません:

std::string read_str(std::istream & in)
{
        const int size  = 1024;
        char pBuffer[size];
        in.getline(pBuffer, size, '\0');
        return std::string(pBuffer);
}

区切り文字として '\0' があり、文字列が 1024 バイトを超えない場合の例です。

于 2009-11-05T15:55:21.330 に答える