首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >std中的Bug::wstring?

std中的Bug::wstring?
EN

Stack Overflow用户
提问于 2015-10-19 08:23:00
回答 1查看 141关注 0票数 1

我发现std::wstring的一些非常奇怪的行为。

代码语言:javascript
复制
#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实际上不起作用。

有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-19 08:29:40

代码语言:javascript
复制
second.at(0) + L" "

这个表达式不符合你的预期。at(0)返回一个wchar_t,它实际上是一个整数。L" "是一个宽字符串文本,它被隐式转换为wchar_t const*。因此,在上面的表达式中,您正在执行指针算法,添加L'S'的值(可能与S的ASCII值相同,我相信这是83 )。这为您提供了一个指针,它位于字符串文本的范围之外,该字符串仅为2个字符。最终结果是未定义的行为。

要获得可能要达到的效果,可以将操作数之一设置为wstring

代码语言:javascript
复制
base1 += second.at(0) + std::wstring(L" ");

在这种情况下,可能更简单的做法是只使用2条语句。

代码语言:javascript
复制
base1 += second.at(0);
base1 += L' ';
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33209765

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档