【发布时间】:2016-03-26 21:41:08
【问题描述】:
我编写的程序应该从用户输入中获取多行,然后显示多行星号,第一行有一个星号,第二行有两个星号,依此类推。 它有效,但我有两个问题:
1) 每行的开头总是有一个附加符号,我不知道它的来源。我试过显示数组的 [0] 值,但它似乎不是来自那里。
2) 在输入一些行数(不是全部)时,程序会在行之后立即显示它们以及附加的随机符号。这是动态内存分配的问题吗?
感谢您的帮助。
#include<iostream>
using namespace std;
int main()
{
cout << "Enter the number of rows: ";
int number;
cin >> number;
int q = number + 1;
char dot = '.';
char asterisk = '*';
char * array1 = new char[q];
int n, m, s;
n = number;
for (n; n > 0; n--)
{
array1[n] = asterisk;
for (m = n - 1; m > -1; m--)
{
array1[m] = dot;
}
cout << array1 << endl;
}
delete [] array1;
return 0;
}
【问题讨论】:
-
数组索引从
0开始。因此,如果您从10行开始,第一次迭代会将array1[10]设置为 * - 但它实际上是字符串中的第 11 个字符。 -
您更严重的问题是您的字符串不是以空值结尾的。您需要为一个额外的字符分配空间并将其设置为 0。
-
您没有初始化分配的内存,因此它可能包含任何内容,打印它可能会导致未定义的行为,因为您没有使用 nul 终止它
-
我建议尽可能使用 STL 容器。使用 std::string 和 std::vector 而不是手动分配。难道只是为了学习?即便如此,最好还是学习“正确”的方式。