【发布时间】:2022-01-23 20:57:14
【问题描述】:
问题是编写一个程序从用户那里读取一个整数数组并将其传递给一个函数,该函数接受两个数组 - 第一个数组包含从用户获得的值,第二个数组作为空数组。目的是将原始数组中存在的偶数的索引附加到空数组中,并返回原始数组中存在的偶数个数。
如果输入是:
Enter number of elements: 5
Enter element [1]: 0
Enter element [2]: 1
Enter element [3]: 2
Enter element [4]: 3
Enter element [5]: 4
然后输出显示:
37945345.
这是空数组的第一个元素内的垃圾值。
这是代码:
#include <stdio.h>
int evenIndices(int origArr[], int emptyArr[]) {
int i = 0, j = 0;
int evenCount = 0;
while (origArr[i] != '\0') {
if (origArr[i] % 2 == 0) {
emptyArr[j] = i;
evenCount ++;
j++;
}
i++;
}
return evenCount;
}
int main() {
int numOfElts;
printf("Enter number of elements: ");
scanf("%d", &numOfElts);
int arr[numOfElts];
for (int i = 0; i < numOfElts; i++) {
printf("Enter element [%d]: ", i + 1);
scanf("%d", &arr[i]);
}
arr[numOfElts] = '\0';
int indexArr[numOfElts];
int evenCount = evenIndices(arr, indexArr);
printf("There are %d even numbers. \n", evenCount);
printf("*** Indices With Even Numbers in Original Array *** \n");
for (int i = 0; i < evenCount - 1; i++) {
printf("%d, ", indexArr[i]);
}
printf("%d. \n", indexArr[evenCount - 1]);
return 0;
}
此代码适用于数组中除 0 以外的所有数字。如果输入 0,则函数假定它与 '\0' 相同并退出循环。有什么办法解决这个问题?
【问题讨论】:
-
那是因为
'\0'的值是0——这里没有假设,就是这么定义的。更好的解决方案是将数组的长度传递给函数,而不是使用一些标记值 -
arr[numOfElts] = '\0'写入越界。
标签: arrays c undefined-behavior zero function-definition