0

これがopenBSDで機能しないのはなぜですか。私はこのエラーを受け取りました:

エラー: 構造体または共用体ではないメンバー 'ip_hl' の要求

エラー: 構造体または共用体ではないメンバー 'ip_v' の要求

等々...

#include <sys/types.h>
#include <netdb.h>
#include <netinet/in_systm.h>
#include <netinet/in.h>
#include <netinet/tcp.h>
#include <netinet/ip.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#include <stdlib.h>
#include <err.h>
#include <stdio.h>
#include <string.h>
#include <sysexits.h>
int main(int argc, char *argv[]) {

int mahoosocket, mahoo;
char data[4096];
struct sockaddr_in sin;
struct tcphdr tcp;
struct ip *ip =(struct ip *)data;

if (argc != 2)

(....)

 memset(&sin, 0, sizeof(sin));
 sin.sin_family = AF_INET;
 sin.sin_port = 0;

.(...)

ip.ip_hl=5;
ip.ip_v =4;
ip.ip_tos =0;
ip.ip_id = htonl (54321);
ip.ip_off=0;
ip.ip_ttl=255;
ip.ip_p=6;
ip.ip_sum=0;
ip.ip_src.s_addr= inet_addr ("127.0.0.1");    


(.....)
4

1 に答える 1

3

ipはポインタです:

struct ip *ip =(struct ip *)data;

構造体へのポインターでメンバーにアクセスするときは、->notを使用します。.

ip->ip_hl = 5;
ip->ip_v = 4;
ip->ip_src.s_addr = inet_addr ("127.0.0.1"); 

これは、理解しておく必要がある基本的な C 構文です。

于 2013-10-16T05:30:34.237 に答える