1

LMlib.h

#ifndef LMlib_H
#define LMlib_H
#endif

#define MAX_IP_LENGTH 15         
#define MAX_TABLE_ROWS 255

struct ForwardingTableRow
{
        char address[MAX_IP_LENGTH];
        int subnetMask;
        int interface;
};

typedef struct ForwardingTableRow ForwardingTableRow;

LMlib.c

#include <stdio.h>
#include <math.h>
#include "LMlib.h"

void ReadForwardingTable(FILE* f,ForwardingTableRow * table)
{
        int i;
        for(i=0;i<MAX_TABLE_ROWS;i++)
        {
                fscanf(f,"%s %d %d",&table.address[i],&table.subnetMask[i],&table.interface[i]);
        }


}

编译器命令:

cc LMlib.c LMlib.h main.c -lm

错误:

LMlib.c: In function ‘ReadForwardingTable’:
LMlib.c:11:27: error: request for member ‘address’ in something not a structure or union
LMlib.c:11:45: error: request for member ‘subnetMask’ in something not a structure or union
LMlib.c:11:66: error: request for member ‘interface’ in something not a structure or union

我做错了什么?

4

2 回答 2

7

你有三个问题:第一个是你没有正确使用数组索引。table变量是数组,而不是结构成员:

fscanf(f, "%s %d %d",
    table[i].address,
    &table[i].subnetMask,
    &table[i].interface);

第二个问题与您的问题无关,但可能会导致将来出现麻烦。这是您拥有的包含后卫。#endif应该在文件的末尾否则你只保护单个#define而不是别的。

第三个也是最严重的问题是你在这个address领域只有一个角色。IP 地址的最大长度为 15,这是正确的,但如果要将其视为字符串,则还需要为字符串终止符留出空间。将其声明为

address[MAX_IP_LENGTH + 1];

应该没问题。

于 2012-11-07T14:39:09.110 回答
0

这都是关于运算符优先级的。.的优先级高于&,所以基本上它说:

  &(table.address)[i]

andtable不是结构,而是指向结构的指针。然后,你的索引是错误的,你索引的是结构的成员,而不是数组。

像这样重写:

  table[i].address
于 2012-11-07T14:39:36.057 回答