c++ - 如何告诉 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
解决方案
这个问题与字符串流无关。问题是您正在为该 stringstream 构造函数参数隐式构造 a ,并使用需要 C 字符串的重载来执行此操作std::string
。const char*
因此,自然地,您应该期待类似 C 字符串的行为。
相反,您可以使用std::string(const char*, std::size_t)
构造函数形成参数,或者使用 . 将数据发送到默认构造的字符串流.write
。
推荐阅读
- neo4j - Neo4j Cypher 通过有结果加入组
- php - 根据复选框的用户输入切换数据库中的值
- jakarta-mail - IMAP 商店是否总是有收件箱?
- java - okHttp NetworkOnMainThreadException 尽管有新线程
- javascript - PhpStorm 2019.2:Material UI 组件需要不需要的道具
- swiftui - 我试图从 http api 重复获取数据并相应地更新我的 SwiftUI 视图
- javascript - Invariant Violation: Invariant Violation: 试图在渲染列表时获取超出范围索引 NaN 的帧
- c - 如何在 C 中正确清空字符串(字符数组)?
- android - 我想使用端口访问本地服务器以获取 json 作为响应
- sql - 红移光谱:如何仅导入某些文件