我没有收到缓冲区中的任何内容。无论我printf
我的缓冲区,它总是空的或显示垃圾值。有人可以帮忙吗?
我定义了header,packet并在我的main中调用它们,但缓冲区仍显示垃圾。
#include <stdint.h>
struct header {
uint16_t f1;
uint16_t f2;
uint32_t f3;
};
struct data {
uint16_t pf1;
uint64_t pf2;
};
#include <arpa/inet.h>
#include <string.h>
#include <stdint.h>
#include "packet.h"
void htonHeader(struct header h, char buffer[8]) {
uint16_t u16;
uint32_t u32;
u16 = htons(h.f1);
memcpy(buffer+0, &u16, 2);
printf("Value of buff is: %hu\n",buffer);
u16 = htons(h.f2);
memcpy(buffer+2, &u16, 2);
u32 = htonl(h.f3);
memcpy(buffer+4, &u32, 4);
}
void htonData(struct data d, char buffer[10]) {
uint16_t u16;
uint32_t u32;
u16 = htons(d.pf1);
memcpy(buffer+0, &u16, 2);
u32 = htonl(d.pf2>>32);
memcpy(buffer+2, &u32, 4);
u32 = htonl(d.pf2);
memcpy(buffer+6,&u32, 4);
}
void HeaderData(struct header h, struct data d, char buffer[18]) {
htonHeader(h, buffer+0);
htonData(d, buffer+8);
printf("buff is: %s\n",buffer);
}
#include <stdio.h>
#include "packet.c"
#include <string.h>
#include<stdlib.h>
int main(){
struct header h;
struct data d;
char buff[18];
//printf("Packet is: %s\n",buff);
printf("Generating Packets..... \n");
h.f1=1;
d.pf1=2;
h.f2=3;
d.pf2=4;
h.f3=5;
HeaderData(h,d,buff);
strcat(buff,buff+8);
printf("Packet is: %s\n",buff);
return 0;
}
答案 0 :(得分:1)
问题是您的printf()
语法错误(printf( "%hu", ... );
期望无符号短信作为参数,但您传递指针)或尝试使用{打印buff
{1}}但内容是二进制,而不是文本。你可以做的是做某种hexdump,比如:
"%s"
请注意,使用 int i;
for( i=0; i<sizeof( buff ); i++ ) {
printf( "%x ", buff[i] & 0xff );
}
puts( "" ); // terminate the line
仅使用im sizeof
,在另一个函数中,您必须以不同方式确定缓冲区大小。
此外:由于main()
的二进制内容,您无法使用buff
。即使您已确定复制的最后一个值后面有strcat()
(我没有检查过你是否有),根据您复制的整数值,可能还有另一个'\0'
在该值之前的值,'\0'
将覆盖该点上的所有内容。