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
我做错了什么?
答案 0 :(得分:7)
您有三个问题:第一个问题是您没有正确使用数组索引。它是table
变量是数组,而不是结构成员:
fscanf(f, "%s %d %d",
table[i].address,
&table[i].subnetMask,
&table[i].interface);
第二个问题与您的问题无关,但可能导致将来出现问题。这是你拥有的包括守卫。 #endif
应位于文件的 end ,否则您只能保护单#define
而不保留其他内容。
第三个也是最严重的问题是你在address
字段中只有一个字符。 IP地址的最大长度为15,这是正确的,但是如果要将其视为字符串,则还需要空间用于字符串终止符。将其声明为
address[MAX_IP_LENGTH + 1];
它应该没问题。
答案 1 :(得分:0)
关于operator precedence的全部内容。 .
的优先级高于&
,所以基本上它会说:
&(table.address)[i]
和table
不是结构,而是指向struct的指针。然后,您的索引编写错误,您正在索引结构的成员,而不是数组。
像这样改写:
table[i].address