分配要求您设计路由器表查找例程,该例程将从模拟帧(实际上是模拟帧中的数据包)中获取目标IP地址,然后执行路由表的搜索(保持简单说2 x 2数组,其中一列是已知的IP地址,另一列是模拟框中的端口,您可以在该框中引导绑定到此IP的数据包。
我一直在研究这个问题,而且我被困住了。有人能帮我吗!我已经创建了一个文本文件并尝试将其插入到项目中,但它仍然没有检测到它。我不知道还能做什么。提前致谢!!
#include <stdio.h>
#include "stdlib.h"
#include "string.h"
void Ouccpy_Routing_Table();
typedef struct RTE
{
unsigned long Dest;
int port;
unsigned long Route;
};
Route[120];
struct IP
{
unsigned char Ipverison;
unsigned char TOS;
unsigned short ID;
unsigned short Fragoffset;
unsigned char TTL;
unsigned char Protcl;
unsigned char dcheksum;
unsigned char Data[1];
};
int main()
{
int count;
FILE *ptr_testfile;
struct IP my_testfile;
ptr_testfile = fopen_s("c:\\testroute\\TEST.txt", "rb");
if (!ptr_testfile)
{
printf("Cannot Open File!");
return 1;
}
while (count = 2) count <= (sizeof(struct IP)); count++;
{
fread(&my_testfile, sizeof(struct IP), 2, ptr_testfile);
}
fclose(ptr_testfile);
return 0;
}
void Ouccpy_Routing_Table()
{
}
答案 0 :(得分:0)
将文本文件放在相应的位置。
在编译之前验证它。如果问题仍然存在,请发布错误代码?
答案 1 :(得分:0)
关于代码尝试打开文件的方式
ptr_testfile = fopen_s("c:\\testroute\\TEST.txt", "rb");
编译器至少应该警告你没有提供足够的参数。
如果您已经阅读了documentation to fread_s()
,那么您应该已经知道它本应该被调用:
errno_t en = fopen_s(&ptr_testfile, "c:\\testroute\\TEST.txt", "rb");
if (0 != en)
{
issue some error message here
}
作为替代方案,您可以使用标准fopen()
代替Microsoft特定fopen_s()
。 fopen()
会像原始代码那样被调用。
此
while (count = 2) count <= (sizeof(struct IP)); count++;
{
fread(...);
}
与
相同while (count = 2)
count <= (sizeof(struct IP));
count++;
{
fread(...);
}
又与
相同while (count = 2) /* This repeatly assigns 2 to count. Resulting in an infinite loop.*/
{
count <= sizeof(struct IP); /* This does nothing. */
}
/* Because of the infinite loop above the code never arrives here. */
count++;
fread(...);
请再看一下。