Hel*_*ein 2 c++ string boost stl
解决方案可能很明显,但我没有看到.我有这个简单的C++代码:
// Build the search pattern
// sPath is passed in as a parameter into this function
trim_right_if(sPath, is_any_of(L"\\"));
wstring sSearchPattern = sPath + L"\\*.*";
Run Code Online (Sandbox Code Playgroud)
我的问题是+运算符没有效果(在调试器中检查).该字符串sSearchPattern初始化为sPathonly 值.
注意:sPath是一个wstring.
我想要实现的例子:
sSearchPattern -> C:\SomePath\*.*
更多信息:
当我在调试器中查看sPath时,在最后一个字符后面看到两个NULL字符.当我查看sSearchPattern时,会附加"\*.*",但是在两个NULL字符之后.对此有何解释?
这应该有效,并且确实适用于VS2010,SP1:
#include <iostream>
#include <string>
int main()
{
const std::wstring sPath = L"C:\\SomePath";
const std::wstring sSearchPattern = sPath + L"\\*.*";
std::wcout << sSearchPattern << L'\n';
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这打印
C:\SomePath\*.*
为了我.
我发现存储在字符串末尾的两个 NULL 字符是问题所在。显然 std::wstring 不像旧的 C 字符串那样关心 NULL。如果它认为一个字符串有 10 个字符长,它并不关心这 10 个字符中是否有一些是 NULL 字符。如果随后附加到该字符串,则附加字符将附加在第 10 个字符之后。如果字符串的最后一个字符恰好是 NULL,您将得到:
C:\\SomePath\0\0\\*.*
这样的字符串实际上不能在任何地方使用。
我如何获得原始字符串末尾的 NULL 字符?我在其他一些用 NULL 填充字符串的函数中使用了 wstring.resize()。我这样做是为了将 &string[0] 传递给需要 LPWSTR 的 Windows API 函数。
现在我知道这不起作用,我改用真正的 LPWSTR。这有点笨拙,但它有效。来自 MFC,我想我可以像 CString 一样使用 std::wstring 及其 GetBuffer 和 Release 方法。
| 归档时间: |
|
| 查看次数: |
10454 次 |
| 最近记录: |