首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

对于string赋值的1点疑问,求解答

2013-04-02 
对于string赋值的一点疑问,求解答#include iostream#include vector#include stringusing namespace

对于string赋值的一点疑问,求解答


#include <iostream>
#include <vector>
#include <string>
using namespace std;
int main()
{
    vector<char> cvec(10);
    for(int i=0;i!=9;i++)
       cvec[i]='a'+i;
    cvec[9]='\0';
    string s("abc");
    for(int i=0;i!=cvec.size();i++)
    {
       s[i]=cvec[i];
     }
     for(int i=0;s[i]!='\0';i++)
        cout<<s[i];           //这里输出的是abcdefghi
     cout<<endl;
     cout<<s<<endl;           //这里输出的是abc
      getchar();
     return 0;   


注释里是两个不同的输出,为什么s的值没有变呢?
[解决办法]
楼主确定你那能正常运行?对s[4]的赋值就越界了,直接崩溃了,哪还有什么输出,字符串s有四个字符(包括末尾的'\0'),在对s[4]赋值的时候就崩溃了。
[解决办法]
引用:
楼主确定你那能正常运行?对s[4]的赋值就越界了,直接崩溃了,哪还有什么输出,字符串s有四个字符(包括末尾的'\0'),在对s[4]赋值的时候就崩溃了。

vs2008会崩掉,string不能这样用,若按位赋值需先resize扩充容量。
#include <iostream>
#include <vector>
#include <string>
using namespace std;
int main()
{
vector<char> cvec(10);
for(int i=0;i!=9;i++)
cvec[i]='a'+i;
cvec[9]='\0';
string s("abc");

////////////////
s.resize(cvec.size());
///////////////
for(int i=0;i!=cvec.size();i++)
{
s[i]=cvec[i];
}
for(int i=0;s[i]!='\0';i++)
cout<<s[i];           //这里输出的是abcdefghi
cout<<endl;
cout<<s<<endl;           //这里输出的是abc
getchar();
return 0;   

热点排行