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”期望参数是指向struct
InternetAddress
的指针,但您传递的只是指向
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数组。