2 dayugenhao4 dayugenhao4 于 2015.05.30 16:40 提问

c++程序运行时出现string subscript out of range

#include
using namespace std;
int main()
{
string s;
for (int i = 8; i >= 0; i--)
s[i] = i;
for (int j = 0; j < s.size(); j++)
cout << s[j] << " ";
cout << endl;
system("pause");
}
这个程序运行时出现错误string subscript out of range,为何?

10个回答

chentravelling
chentravelling   2015.05.31 01:03

1.如果你的程序里只有#include,那么(1)string s-->string s[8],你后面用的是一个数组(2)C++里string型复制是使用s[0]=string("0");,所以你的s[i]=i;这句要改!(3)s.size() 也不对。最后的程序大概是下面的东东,C++里int和string转换较为复杂

 #include <iostream>
#include <string>
#include <sstream>
using namespace std;
int main()
{
    string s[9];
    for(int i=8;i>=0;i--)
    {
        stringstream ss;
        ss<<i;
        ss>>s[i];
    }
    for(int j=0;j<9 ;j++)
    cout<<s[j]<<" ";
    return 0;
}

chentravelling
chentravelling java操作string很方便
2 年多之前 回复
tbwangxw
tbwangxw   2015.05.30 16:47

溢出
你对string s未初始化,如果要对s进行操作,需对s进行初始化,给其分配相应的存储空间

dayugenhao4
dayugenhao4 谢谢,原来是这样。
2 年多之前 回复
zjrong112
zjrong112   2015.05.30 17:03

s没有分配任何空间 所有赋值错误

z120786515
z120786515   2015.05.30 17:04

你对string s未初始化,如果要对s进行操作,需对s进行初始化,给其分配相应的存储空间

bobotheking
bobotheking   2015.05.30 18:01

要对string变量赋值,分配内存空间。错误提示就是使用变量时内存溢出。内存不足,所以初始化很重要。

oyljerry
oyljerry   Ds   Rxr 2015.05.30 20:18

string虽然是动态内存,但你没插入内容,它并不会分配八个空间。所有下标操作就会有问题。你需要先让它分配这么多空间。

caozhy
caozhy   Ds   Rxr 2015.05.30 20:22

string s;
->
string s = " ";

caozhy
caozhy   Ds   Rxr 2015.05.30 20:22
 string s;
->
string s = "        ";
wsh1992o
wsh1992o   Rxr 2015.05.30 21:12

要先对string s初始化

u013685226
u013685226   2015.05.30 22:44

没有分配空间。你可以先分配空间。或者:
s += i \ s.append(i);

Csdn user default icon
上传中...
上传图片
插入图片