我做了一个函数,检查一个数组的6个元素是否相等,如果相等,它会更改另一个数组的值。它可以编译,但是当我运行它时,会出现“堆栈缓冲区溢出”,并且我的编译器说即使初始化它,数组也不会被初始化。
我尝试重新定义函数中的整个数组,但是出现了“预期表达式”错误。
int match(int numbers[], int matchHighest){
int matchArray[] = {0, 0, 0, 0, 0, 0};
int i = 0;
match6(&numbers[i], &matchArray[5]);
matchHighest = matchArray[5];
return matchHighest;
}
int match6 (int numbers[], int matchArray[5]){
int i=0;
matchArray[5] = 0;
while((numbers[i]==numbers[i+1]) && (i<4)){
i++;
}
if(i == 4){
matchArray[5] = 6 * numbers[0] + 27;
}
return matchArray[5];
}
如果要满足if语句,我希望它更改matchArray [5]的值。
编辑:
我的主要是:
int main(void){
int numbers[6]={0,0,0,0,0,0};
int matchHighest = 0;
inputArray(numbers);
match(numbers, matchHighest);
printf("test worked \n");
return 0;
}
最佳答案
您正在传递&matchArray[5]
,它是matchArray的第5个元素的地址,作为match6的matchArray
参数。由于match的matchArray仅包含6个元素,因此这是只有1个元素的切片,这太小了。
您可能希望传递matchArray
-指向第0个元素的指针,在这种情况下,您将获得所有6个元素的切片。然后,您可能还想将match6的参数声明为int matchArray[6]