c++ - 擦除带有不可打印字符的 std::string 上的删除习语会引发异常
问题描述
我正在通过管道从另一个进程中读取一些文本。管道将数据返回给变量chBuf
,但包含许多不可打印的字符。我尝试使用擦除和删除来删除这些不可打印的字符,但抛出异常。该程序在没有此擦除删除线的情况下工作。我可能做错了什么?
ReadFile(si->child_out_r, chBuf, BUFSIZE, &dwRead, NULL);
string s(chBuf);
s.erase(remove_if(s.begin(), s.end(), [](char c) { return !isprint((unsigned)c); }), s.end());
cout << s;
解决方案
如果文件中的数据可能包含空值(在您感兴趣的其他字符中),或者不能保证最后有空值,那么您需要告诉std::string
它应该使用多少数据来构建字符串. 您可以使用std::string( const char *, size_t )
构造函数执行此操作:
std::string s( chBuf, dwRead );
如果你这样做,字符串清理过程应该可以正常工作。
推荐阅读
- javascript - 使用表单输入更新状态
- java - Java 包文件夹命名约定
- flutter - DraggableScrollableSheet中的Listview不会在颤动中滚动
- javascript - 如何在angularjs中的html之间传递变量?
- python - 如果“id”出现少于 2 次,则删除 pandas 数据框中的行
- angular - 在 primeNG 焦点上未触发 completeMethod 事件
- r - SASxport 到 R:读取 XPT SAS 文件时出错
- java - 如何提高算法的运行时间?
- git - 使用过滤器干净地列出所有远程分支
- asp.net-core - 如何在 ASP.NET Core 应用程序中使用领域集合通知?