莫名其妙的missing ';'

时间:2020-12-20 19:39:47
#include<windows.h>
#include<stdio.h>
#include<iphlpapi.h>
#pragma comment(lib,"ws2_32.lib")
#pragma comment (lib,"iphlpapi.lib")

char s[20];
char e[20];
void scan(char *ip)
{
HRESULT a;
ULONG b,c[2],len=6;
b=inet_addr(ip);
ZeroMemory(c,0);
a=SendARP(b,NULL,c,&len);
if(a==NO_ERROR)
{
size_t i,j;
char d[10000];
PBYTE g=(PBYTE)c;
for(i=0,j=0;i<len-1;i++)
{
j+=sprintf(d+j,"%02x",g[i]);
}
sprintf(d+j,"%02x",g[i]);
printf("主机%s可达",mac地址为:%s\n,ip,d);
}


}
void main(int argc, char **argv)
{
char *addr;
int p;
addr=strchr(argv[1],'-');
p=addr-argv[1]+1;
strncpy(s,argv[1],p-1);
strncpy(e,addr+1,strlen(argv[1])-p);
struct in_addr target_addr;
ULONG ips=inet_addr(s);
ULONG ipe=inet_addr(e);
ips=ntohl(ips);
ipe=ntohl(ipe);
for(ULONG  k=ips;k<ipe;k++)
{
target_addr.S_un.S_addr=htonl(k);
scan(inet_ntoa(target_addr));
Sleep(10);
}
}

错误代码:
microsoft sdks\windows\v6.1\include\ifdef.h(153) : error C2146: syntax error : missing ';' before identifier 'NET_IFTYPE'
microsoft sdks\windows\v6.1\include\ifdef.h(153) : fatal error C1004: unexpected end of file found

点过去是这句:typedef UINT16  NET_IFTYPE,*PNET_IFTYPE;
没错啊。网上类似的问题有说要加头文件的,可不知道加什么头文件。
不知道什么原因?

11 个解决方案

#1


printf("主机%s可达",mac地址为:%s\n,ip,d);这个你怎么写成这样了

#2


太大意了吧。。。
printf("主机%s可达,mac地址为:%s\n“,ip,d);

#3


引用 2 楼 visualeleven 的回复:
太大意了吧。。。
printf("主机%s可达,mac地址为:%s\n“,ip,d);

谢谢。
但此处改正后问题仍在。

#4


这段代码没有问题,你可以查下是不是别的文件出的问题

#5


uint16实际上就是unsigned short吧?可能头文件有问题,你可以在你的程序里面用最原始的类型来试试。就是不要包含那么多头文件。

#6


你的程序中有非ASCII码字符串。

#7


点过去是这句:typedef UINT16 NET_IFTYPE,*PNET_IFTYPE;
应该是上一行出问题了,你看看,上一行的定义,然后猜测少包含哪个.h了

#8


引用 7 楼 cchvsgame 的回复:
点过去是这句:typedef UINT16 NET_IFTYPE,*PNET_IFTYPE;
应该是上一行出问题了,你看看,上一行的定义,然后猜测少包含哪个.h了

这句:typedef UINT16 NET_IFTYPE,*PNET_IFTYPE;是在sdk包中的microsoft sdks\windows\v6.1\include\ifdef.h文件中,不会有错误吧。

#9


引用 6 楼 tech_study_00 的回复:
你的程序中有非ASCII码字符串。

我检查了一遍,没找到。

#10


引用 1 楼 visualeleven 的回复:
printf("主机%s可达",mac地址为:%s\n,ip,d);这个你怎么写成这样了

修改以后,把你的代码放在VS2008中编译了一次,可以通过编译,就是运行就崩溃了,好像是野指针问题。。。

#11


UINT16 未定义?

#1


printf("主机%s可达",mac地址为:%s\n,ip,d);这个你怎么写成这样了

#2


太大意了吧。。。
printf("主机%s可达,mac地址为:%s\n“,ip,d);

#3


引用 2 楼 visualeleven 的回复:
太大意了吧。。。
printf("主机%s可达,mac地址为:%s\n“,ip,d);

谢谢。
但此处改正后问题仍在。

#4


这段代码没有问题,你可以查下是不是别的文件出的问题

#5


uint16实际上就是unsigned short吧?可能头文件有问题,你可以在你的程序里面用最原始的类型来试试。就是不要包含那么多头文件。

#6


你的程序中有非ASCII码字符串。

#7


点过去是这句:typedef UINT16 NET_IFTYPE,*PNET_IFTYPE;
应该是上一行出问题了,你看看,上一行的定义,然后猜测少包含哪个.h了

#8


引用 7 楼 cchvsgame 的回复:
点过去是这句:typedef UINT16 NET_IFTYPE,*PNET_IFTYPE;
应该是上一行出问题了,你看看,上一行的定义,然后猜测少包含哪个.h了

这句:typedef UINT16 NET_IFTYPE,*PNET_IFTYPE;是在sdk包中的microsoft sdks\windows\v6.1\include\ifdef.h文件中,不会有错误吧。

#9


引用 6 楼 tech_study_00 的回复:
你的程序中有非ASCII码字符串。

我检查了一遍,没找到。

#10


引用 1 楼 visualeleven 的回复:
printf("主机%s可达",mac地址为:%s\n,ip,d);这个你怎么写成这样了

修改以后,把你的代码放在VS2008中编译了一次,可以通过编译,就是运行就崩溃了,好像是野指针问题。。。

#11


UINT16 未定义?