对于我的C ++类简介中的项目,我们使用大小为140的char数组,使用以下函数初始化:
void InputText(char A[140], string prompt)
{
cout << prompt;
cin.ignore();
cin.getline(A,140);
}
我使用此函数来计算数组中填充元素的数量:
int numElements(char A[140]) //searches for the first '\0' in an array and returns the index, if none are found, returns 140
{
int numEl = 140;
for (int i = 0; i <= 140; i++) { if (A[i] == '\0') { numEl = i; break; } }
return numEl;
}
当我在填充了InputText()的数组上使用它时它工作正常,但当我用另一个数组测试它时:
char A[] = {'1', '2', '3', '4', '5'};
cout << numElements(A);
它将打印出13而不是5.我不明白为什么会发生这种情况。
答案 0 :(得分:0)
a数组未null
终止,导致未定义的行为。在您的情况下,它打印13
它可能会打印出其他内容,甚至会因访问冲突而崩溃。
您应该将'\0'
添加为数组A
中的最后一个字符来终止字符串,以便您知道if语句A[i]=='\0'
中数组末尾的结尾
另外(与您的问题没有直接关联)您的声明&#39;是错的
你的i
从0到140(包括140)运行,所以它运行141次,比你的最大值多1次
你应该使用
i<140
代替i<=140
答案 1 :(得分:0)
以下void InputText(char A[140], string prompt)
实际上是
void InputText(char* A, std::string prompt)
您可以通过引用传递数组:
void InputText(char (&A)[140], std::string prompt)
{
cout << prompt;
cin.ignore();
cin.getline(A, 140);
}
和类似的
int numElements(char (&A)[140]) {
int numEl = 140;
for (int i = 0; i < 140; i++) { if (A[i] == '\0') { numEl = i; break; } }
return numEl;
}
并宣布它像
char A[140] = {'1', '2', '3', '4', '5'};
std::cout << numElements(A);
请注意,在numElements
中,您加入了A[140]
,这是未定义的行为。