我们有两个数组A和B,每个都有10个整数。编写一个函数来测试数组A的每个元素是否等于数组B中的对应元素。换句话说,函数必须检查A[0]
是否等于B[0]
,A[1]
是等于B[1]
,等等。如果所有元素都相等,则函数返回true;如果至少有一个元素不相等,则返回false。
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
/* run this program using the console pauser or add
your own getch, system("pause") or input loop */
bool array(int ptr1[], int ptr2[]);
int main(int argc, char *argv[]) {
int array1[] = {11, 33, 34, 25, 16, 2, 24, 57, 86, 66};
int array2[] = {11, 33, 34, 25, 16, 2, 24, 57, 86, 66};
int i;
printf("Array A\t\tArray B\n");
for(i = 0; i < 10; i++)
printf("%d\t\t%d\n", array1[i], array2[i]);
printf("\nResult of comparision: \n");
bool result = array (array1, array2);
if(result == 1)
printf("false\n");
else
printf("false\n");
getch();
return 0;
}
我得到的错误是:
main.c(.text+0xfa): undefined 'array' [Error] Id returned 1 exit status recipe for target '"Problem' failed
答案 0 :(得分:1)
问题是您已声明了 array
:
bool array(int ptr1[], int ptr2[]);
但不是定义它。链接时,链接器会查找函数array
的定义,但找不到它,提示错误:
main.c(.text+0xfa): undefined 'array'
[Error] Id returned 1 exit status
recipe for target '"Problem' failed
要在声明的同一点定义该函数,您必须添加该函数的主体。在这种情况下,不需要前向声明。它已在main
中使用之前声明,例如
int arraycmp (int ptr1[], int ptr2[], size_t size)
{
return memcmp (ptr1, ptr2, size);
}
(注意:无论您使用memcmp
还是只是循环遍历每个元素并为每个元素执行单个比较,您必须将元素数量作为参数传递)
如果另一方面,在main()
之后定义函数,则需要转发声明,以便该函数可用于main()
。
完全放弃,你可以做类似以下的事情:
#include <stdio.h>
#include <string.h>
/* run this program using the console pauser or add
your own getch, system("pause") or input loop */
int arraycmp (int ptr1[], int ptr2[], size_t size)
{
return memcmp (ptr1, ptr2, size);
}
int main (void) {
int array1[] = {11, 33, 34, 25, 16, 2, 24, 57, 86, 66},
array2[] = {11, 33, 34, 25, 16, 2, 24, 57, 86, 66},
i;
printf("Array A\t\tArray B\n");
for(i = 0; i < 10; i++)
printf(" %d\t\t %d\n", array1[i], array2[i]);
printf("\nResult of comparision: %s\n",
arraycmp (array1, array2, sizeof array1) ? "false" : "true");
#if defined (_WIN32) || defined (_WIN64)
getchar();
#endif
return 0;
}
(注意:如果你的数组有可能在元素数量上有所不同,你应该在调用arraycmp
之前检查并按你的意愿处理错误。要么返回退出该点,要么传递较小的尺寸,只比较初始数量的元素)
示例使用/输出
$ ./bin/arrcmp
Array A Array B
11 11
33 33
34 34
25 25
16 16
2 2
24 24
57 57
86 86
66 66
Result of comparision: true
在57
中将56
更改为array2
,
$ ./bin/arrcmp
Array A Array B
11 11
33 33
34 34
25 25
16 16
2 2
24 24
57 56
86 86
66 66
Result of comparision: false
仔细看看,如果您有其他问题,请告诉我。