首页 > 解决方案 > 如何告诉 stringstream 忽略空终止字符?

问题描述

有没有办法告诉字符串流忽略空终止字符并读取一定数量的字符?

正如您从这个最小示例中看到的那样,即使 char 数组由 3 个字符组成,字符串流也会在第二个位置终止:

#include <sstream>
#include <iostream>

using namespace std;

int main(int argc, char* argv[]) {
        char test[3];
        test[0] = '1';
        test[1] = '\0';
        test[2] = '2';

        stringstream ss(test);

        char c;
        cout << "start" << endl;
        while (ss.get(c)) {
                cout << c << endl;
        }

        if (ss.eof()) {
                cout << "eof" << endl;
        }
}
$ ./a.out 
start
1
eof

标签: c++istream

解决方案


这个问题与字符串流无关。问题是您正在为该 stringstream 构造函数参数隐式构造 a ,并使用需要 C 字符串的重载来执行此操作std::stringconst char*因此,自然地,您应该期待类似 C 字符串的行为。

相反,您可以使用std::string(const char*, std::size_t)构造函数形成参数,或者使用 . 将数据发送到默认构造的字符串流.write


推荐阅读