好吧,伙计们,我的问题是,我想声明24个变量。我可以使用这一行:
string p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10 ,p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23;
但是,这似乎不是正确的方法,所以我尝试使用循环来为我做。
for (int i = 0;i<=23;++i)
{
char b = i;
string p[b];
p[b] = "-";
cout << p[b];
}
不要忘记关于definind和打印变量的最后部分,这将会改变。但问题是,这段代码可以正常工作(编译时没有错误),但会立即崩溃(Program.exe停止工作......)。这是正确的方法吗?
编辑:
许多人似乎不理解:
对不起,我不清楚,p是没有数组。我想创建变量p0然后p1然后在循环中转发,但我不知道如何表达“p”之后的字符正在为每个循环改变(以及变量)这一事实。
答案 0 :(得分:2)
您正在尝试为阵列中的每个元素“命名”。你只是不能那样做。
只需创建一个大小为24的数组(从0到23),不要试图像现在一样“命名”每个元素,你的元素将是p[0]
,p[1]
。直到p[23]
。
答案 1 :(得分:1)
很难知道您在代码中尝试做什么。这是我最好的猜测:
string p[24];// this allocates your 24-string array
for (int i = 0;i<24;++i)
{
p[i] = "-";
cout << p[i];
}
在开始使用之前,请务必定义具有固定大小的阵列。您的代码会编译,但它不会按您的想法执行。我已注释您的原始代码:
for (int i = 0;i<=23;++i)
{
char b = i;// this seems pointless; basically it does nothing. Keep in mind that a char is just a number. i is already a number.
string p[b];// allocates an array of strings with b elements. This creates a new, empty, array for *each iteration*. This is definitely not what you want.
p[b] = "-";// sets the b-th element of the array to "-". This should crash. In a 24-element array, the 24th element is out of bounds. You can only access indices 0-23.
cout << p[b];
}
答案 2 :(得分:0)
第一次在循环中,数组为“size-zero”,然后你访问一个超过数组末尾的元素。
答案 3 :(得分:0)
您正在访问一个超出范围的数组。
string p[b];
p[b] = "-";
您正在声明一个元素数量为b
的数组,因此有效索引的范围为 0到b
- 1 。但是你要尝试在b
位置进行索引。
第一次循环b
为零,不允许大小为0的数组。
答案 4 :(得分:0)
不清楚你要做什么.. 您似乎正在尝试使用C ++编程打印以下行:
"string p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10 ,p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23;"
并没有在您自己的代码中实际使用这些变量声明。 你编码生成另一个代码吗?
for (int i = 0;i<=23;++i)
{
char b = i;
string p[b]; // why do you declare like this?
p[b] = "-";
cout << p[b];
}