数组函数中的元素数量无法正常工作

时间:2014-10-24 22:46:32

标签: c++ arrays

对于我的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.我不明白为什么会发生这种情况。

2 个答案:

答案 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],这是未定义的行为。