所以我想创建1000个单词,长度为5个随机字符。在我的主要内容中我有[1000]字,但是当我尝试运行此代码时,它会给我一个错误说"表达式:字符串下标超出范围"。我不确定为什么会这样,因为我认为字符串数组是二维的?如果有人能告诉我为什么我的代码错了,我会很感激。感谢。
void createText(string w[], int seed) {
char ch;
srand(seed);
for(int i = 0; i < 1000; i++) {
for(int j = 0; j < 5; j++) {
ch = ('A' + rand() % 26);
w[i][j] = ch;
}
}
for(int i = 0; i < 1000; i++) {
cout << w[i];
}
cout << endl;
}
答案 0 :(得分:0)
如果数组是二维的,则无法像w [i]那样打印其值。你必须打印始终牢记数组是二维的,这意味着输出必须像cout&lt;&lt; W [i] [j];
另外,你传递的是一个字符串数组作为参数,你正在做的是为每个单独的位置添加字符,这意味着你实际上除了在该字符串中插入了1000个字符之外什么都没有(因为你实际上添加了“one-char”字符串,所以你只需要放200个单词,每个单词长度为5个字符。直接插入字符串,你将获得1000个单词,但首先找到一种方法来构建具有随机字符的字符串。
类似的东西:
对于(条件){
对于(条件){ 建立一个词 }
array [x] [y] = string }
我想这与你打算做的相似
答案 1 :(得分:0)
我认为数组w没有1000个元素,还记得在这里你将获得string w[]
的副本。更好的是将指针传递给w (string* w)
,那么你将非常清楚地知道出了什么问题。还记得cout写出字符串,直到它到达'\0'
字符,这也可能是原因。与gdb的快速会话将有助于:
gdb program
...
run
bt full
应该指出你的问题。如果是某种IDE,请学习如何在其中进行调试。 Valgrind或其他一些memcheck,如视觉泄漏检测器或luke stackwalker,也会向您展示一些关于错误初始化或未提及内存泄漏的提示。