C 代码在编译器中返回错误
我的编译器抛出以下错误:C 代码在编译器中返回错误,c,C,我的编译器抛出以下错误: In function 'main': 19 2 [Error] incompatible type for argument 1 of 'CommonLocality' 15 6 [Note] expected 'struct InternetAddress *' but argument is of type 'InternetAddress' In function 'ExactInternetAddress':
In function 'main':
19 2 [Error] incompatible type for argument 1 of 'CommonLocality'
15 6 [Note] expected 'struct InternetAddress *' but argument is of type 'InternetAddress'
In function 'ExactInternetAddress':
34 2 [Error] incompatible types when returning type 'struct InternetAddress *' but 'InternetAddress' was expected
我不知道现在该做什么,我觉得这很简单。提前感谢。问题在于:
internetAddressExactInternetAddress(char*filename)
此函数返回类型为InternetAddress
的对象。
但是函数void CommonLocality(InternetAddress*var)
输入参数是类型为InternetAddress
的指针
您应该重新编写代码以匹配类型。更改此行
14: InternetAddress *ExactInternetAddress(char *filename);
18: char filename [] = "internetaddress.txt";
24: InternetAddress *ExactInternetAddress(char *filename) {
对于此错误:
2[错误]参数1的“CommonLocality”的类型不兼容:
这里的问题是函数“CommonLocality”期望参数是指向structInternetAddress
的指针,但您传递的只是指向InternetAddress
的结构
请检查此项,因为我在您的代码中做了一个小的更正:
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <string.h>
4
5 typedef struct {
6 int xx;
7 int yy;
8 int zz;
9 int mm;
10 char nickname[20];
11 } InternetAddress;
12
13 int size;
14 InternetAddress *ExactInternetAddress(char *filename);
15 void CommonLocality(InternetAddress* var);
16
17 int main() {
18 char *filename = "internetaddress.txt";
19 //InternetAddress addr = ExactInternetAddress(filename);
20 CommonLocality(ExactInternetAddress(filename));
21 //CommonLocality(&addr);
22
23 return 0;
24 }
25
26 InternetAddress *ExactInternetAddress(char *filename) {
27 FILE *fptr;
28 fptr = fopen(filename , "r" );
29 int i;
30 fscanf(fptr,"%d",&size);
31 InternetAddress *arr = malloc(size*sizeof(InternetAddress));
32 for(i = 0; i < size; i++) {
33 fscanf(fptr,"%d.%d.%d.%d %s", &arr[i].xx, &arr[i].yy, &arr[i].zz, &arr[i].mm, arr[i].nickname);
34 fscanf(fptr,"%d.%d.%d.%d %s", &arr[i].xx, &arr[i].yy, &arr[i].zz, &arr[i].mm, arr[i].nickname);
35 }
36 fclose(fptr);
37 return arr;
38 }
39
40 void CommonLocality(InternetAddress *var) {
41 int i, j;
42 for(i = 0; i < size; i++) {
43 for(j = i + 1; j < (size - 1); j++) {
44 if(var[i].xx == var[j].xx && var[i].yy == var[j].yy) {
45 printf("Machines %s and %s are on the same local network.", var[i].nickname, var[j].nickname);
46 }
47 }
48 }
49 }
1#包括
2#包括
3#包括
4.
5类型定义结构{
6 int xx;
7年内;
8个int zz;
9毫米;
10个字符的昵称[20];
11}互联网地址;
12
13整数大小;
14 InternetAddress*ExactInternetAddress(字符*文件名);
15无效通用性(InternetAddress*var);
16
17 int main(){
18 char*filename=“internetaddress.txt”;
19//InternetAddress addr=ExactInternetAddress(文件名);
20通用地址(ExactInternetAddress(文件名));
21//通用性(和地址);
22
23返回0;
24 }
25
26 InternetAddress*ExactInternetAddress(字符*文件名){
27文件*fptr;
28 fptr=fopen(文件名为“r”);
29 int i;
30 fscanf(fptr、%d、&size);
31 InternetAddress*arr=malloc(大小*sizeof(InternetAddress));
32表示(i=0;i
InternetAddress
和InternetAddress*
不是同一类型。“应为“struct InternetAddress*”,但参数的类型为“InternetAddress”
”-这还不够清楚吗ExactInternetAddress
返回一个结构(按值复制),而CommonLocation
需要一个指向结构的指针。更改ExactInternetAddress
的返回类型很可能可以完成这项工作。而且,您永远不会释放malloc
ed数组。