@
Inn0Vat10n 说的那个 c_str(),只是有点奇怪,但不至于非法。zfdBuffer 它是一个 std::string ,regex_replace 返回的也是一个 std::string ,对 std::string 取 c_str()得到一个 const char*,这样最终就是把一个 const char* 赋值给 std::string ,会把 const char*复制一遍到 std::string 的。我觉得奇怪只是说,c_str()其实是不需要的。
@
ShikiSuen 我当初测试用的是这个例子
```c++
std::string zfdBuffer = " \t123 456\t\n789 \taaaa ";
std::cout << '@' << zfdBuffer << '@' << std::endl;
std::regex sedWhiteSpace("\\s+"), sedLeadingSpace("^\\s+"), sedTrailingSpace("\\s+$");
zfdBuffer = std::regex_replace(zfdBuffer, sedWhiteSpace, " ");
zfdBuffer = std::regex_replace(zfdBuffer, sedLeadingSpace, "");
zfdBuffer = std::regex_replace(zfdBuffer, sedTrailingSpace, "");
std::cout << std::endl << '@' << zfdBuffer << '@' << std::endl;
```
它的结果是会把空格,\t ,\n 这些去掉或者合并成一个空格的。所以我觉得原来 regex_replace 的问题应该是解决了的。
```
@ 123 456
789 aaaa @
@
123 456 789
[email protected]```
> 但 Xcode 编译出来之后我发现我这 txt 档案的内容会被清空
我猜可能是其他方面的问题。或者你在第一个 regex_replace 之前把 zdfBuffer 打印出来看是什么内容,然后在最后一个 regex_replace 之后再把 zdfBuffer 打印出来看是什么内容,进行对比?