C++-关于std::string赋值时的疑问?

发布于 2017-02-07 06:19:53 字数 229 浏览 1268 评论 2

bool _IsPartOfEx( const string& hostString, const string& subString )
{
string strHost = hostString;
string strSub = subString;
//后面省略······
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

归属感 2017-05-01 18:05:04

我在其他论坛里得到了这个答案:

string strHost = hostString 是先调用string的复制构造函数,然后再调用复制操作符
string strHost = hostString.c_str() 是先调用string(char*)构造函数,然后再调用复制操作符

复制构造函数重新申请的地址,跟传进来的参数不是一个地址;
string(char)构造函数用的是char的地址,跟传进来的参数一个地址;

想挽留 2017-04-17 00:00:15

正常处理应该不会,出现这种情况想来想去有一个可能:之前用data或者c_str直接修改了string
比如之前这样用了:

strcpy((char*)hostString.data,"SHAN SHAN SS");
strcat(const_cast<char*>(pContact->strPingyinjx.c_str()),buffer);

string的原型是vector,所以string.length是用的vector.size实现的,这是个内部长度。你直接修改了data的话,长度是不会跟着变的。赋值的时候长度跟着赋值过来,出来的字符串就变短了。
直接操作缓冲区还有缓冲区溢出的危险,因为std::string内部的缓冲区不是无限大的,字符串太长就会溢出,而不会自动调整。
字符串连接可以使用operator+=或者append:

hostString = "SHAN SHAN SS";
pContact->strPingyinjx += buffer;
pContact->strPingyinjx.append(buffer);

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文