我需要声明10个长度为100000个字符的字符串。
int main(void)
{
long t;
cin>>t;
string str[10][100000];
for(long i=0;i<=t;i++)
{
getline(cin,str[i][100000]);
}
for(long i=1;i<=t;i++)
{
getStringSize(str[i][100000]);
}
system("PAUSE");
}
我在VC ++中编写代码但是只要我编译代码就会有堆栈溢出。 如果我将字符串的大小保持为str [10] [10000]那么代码效果很好。我需要对代码工作做些什么?
答案 0 :(得分:4)
这不是你如何声明每个10,000个字符的10个字符串 - 你声明了一个2D字符串数组,10x10000。
如果您希望每个字符串都包含10,000个字符,那么就按C ++方式执行此操作:
vector<string> str(10, string(100000, ' '));
请注意,您需要指定要重复10,000次的字符。由于std::string
旨在动态增长,因此您可以完全跳过10,000个部分:库将根据需要分配尽可能多的内存。
vector<string> str(10);
您也可以在C ++ 11中使用array
。
答案 1 :(得分:2)
您需要动态分配内存:您的情况下的堆栈不足以容纳那么多数据
const size_t len = 10;
string* str[len];
for(long i=0; i<len; ++i) {
str[i] = new string[100000];
}
注意:不要忘记在不再需要时删除已分配的内存。
注意:为了让生活更轻松,请使用适合自己进行内存管理的容器(例如vector<>
)
更新:您的代码也存在其他一些问题:
for(long i=0;i<=t;i++) // t could be lager than 9
{
getline(cin,str[i][100000]); // you are accessing a non-existent element
}
尝试改为:
long t;
cin>>t;
vector<string> str; // declare an auto-resizing container of strings
for(long i=0; i<t; i++)
{
string tmp; // this string will be able to store a lot of characters by itself
getline(cin, tmp); // read in the next line
str.push_back(tmp); // add the line to our container
}
for(long i=0; i<t; i++)
{
// do something with str[i] // values str[0]..str[t-1] are guaranteed to be valid
}
答案 2 :(得分:0)
您需要在堆中分配内存。像这样......
string *str[10];
for(int i = 0; i < 10; i++)
str[i] = new string[100000];
答案 3 :(得分:0)
如果你使用std :: string那么它不是固定的长度 - 这就是重点。你可能想要的是:
char str[10][100000];
这会给你10 x char [100000]。就目前而言,你有一个10 x 100000字符串的矩阵。