struct结构存储问题
- C/C++ code
struct tftf_packet{ short opcode; union{ char bytes[512]; struct{ short code; char message[200]; }error; struct{ short block; char bytes[512]; }data; struct { short block; }ack; }u;};void handle_request(int sock, struct sockaddr_in *from, socklen_t from_len,struct tftp_packet *request){ struct tftp_packet data ,response; //省略一些sockt定义 if(request->opcode!=1) return ; char *file_name; file_name = request->u.bytes; //……}int mian(int argc, char **argv){ struct tftp_packet packet; //省略sockt建立等 int bytes; bytes = recvform(sock_fd,&packet,sizeof(packet),0,(struct sockaddr *)&from,&from_len); hadnle_request(sock_fd,&from,from_len,&packet);}
recvform(sock_fd,&packet,sizeof(packet)
直接将接收到的数据存入结构体?不是不可以直接对结构体整体赋值么?这个到底是怎么实现的?怎么回事呢?
file_name = request->u.bytes;
怎样确定是用bytes存储的?而不是message[]呢?
等高手解答
[解决办法]
把数据放到那块内存中,管它是结构体还是什么体,正好那块内存保存的是那个结构体
在一个union中,bytes和message重叠了