Bug in std::wstring?
Bug in std::wstring?
我发现std::wstring有一些非常奇怪的行为。
#include "stdafx.h"
#include <string>
#include <iostream>
int _tmain(int argc, _TCHAR* argv[])
{
std::wstring someString = L"Some dummy string";
std::wstring base1 = L"Base1 ";
std::wstring base2 = L"Base2 ";
std::wstring second = L"Second";
base1 += second.at(0) + L" ";
base2 += second.at(0);
base2 += L" ";
return 0;
}
base1和base2的输出应该是相同的,但是没有。Base1实际上不起作用。
任何想法?
second.at(0) + L" "
这个表达式不符合你的期望。at(0)
返回一个wchar_t
,它实际上是一个整数。L" "
是一个宽字符串字面值,它被隐式地转换为wchar_t const*
。因此,在上面的表达式中,您正在进行指针算术,添加L'S'
的值(可能与S
的ASCII值相同,我相信它是83)。这将为您提供一个指针,该指针远远超出字符串字面量的范围,只有2个字符。最终的结果是未定义的行为。
为了得到你可能想要的效果,你可以将一个操作数设置为wstring
。
base1 += second.at(0) + std::wstring(L" ");
在这种情况下可能更简单的做法是只使用两条语句。
base1 += second.at(0);
base1 += L' ';
相关文章:
- 将日语 wstring 转换为 std::string
- -fshort-wchar 和 std::wstring - 分段错误
- 如何将std::wstring转换为char const[]
- 将utf16宽std::wstring转换为utf8窄std::string以获得罕见字符时出现问题
- 找不到 std::wstring 中存在的wchar_t
- 将 std::string 转换为具有特殊字符的 FString (TCHAR / wstring)
- 将整数附加到 std::wstring 会给出错误
- 如何从 LPWSTR** 转换为 std::vector<std::wstring>
- std::vector<std::wstring> 移动/重新分配内部 wstring.data() 合法吗?
- 使用STD :: WSTRING或WCHAR_T登录
- 从 std::wstring 转换为 jstring
- UTF8 数据到 std::string 或 std::wstring
- 将 std::u16string 转换为 std::wstring,无需复制
- 如何通过 std::unordered_map<std::wstring, T> 中的 std::wstring_view 类型的键查找?
- 从相同的硬编码字符串文字初始化std::string和std::wstring
- C++:为什么在 #include 之前调用 std::wstring::begin() 会导致<vector>此代码中的编译器错误?
- C++ DLL 返回指向 std::list<std::wstring 的指针>
- std::wstring中ASCII符号的字节表示,具有不同的语言环境
- std::wstring 和 LOGFONT 重载冲突 - 为什么?
- Custom Stringstream - Convert std::wstring & std::string