LMlib公司。

#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]);
        }


}

编译器命令:
c c LMlib.c LMlib.h主.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

我做错了什么?

最佳答案

你有三个问题:第一个问题是你不能正确使用数组索引。数组是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];

应该没事的。

09-05 17:22