У меня есть следующая структура:
typedef struct packet {
char magic[1];
char version[1];
char body_length[2];
char body[1020];
} packet;
Поскольку существует внешний протокол между всеми узлами, которые мы должны уважать, я знаю, что пакет udp, который я получу, будет 1024 байта, следовательно произвольная длина массива символов.
Вот что я делаю, когда получаю пакет:
struct paquet reply_packet;
rc = recvfrom(s,&reply_packet,sizeof(reply_packet),0,NULL,NULL);
displayPacket(reply_packet);
Как я его отображаю:
void displayPacket (struct paquet p){
printf("Magic : %s\n",p.magic);
printf("Version : %s\n",p.version);
printf("Body Length: %s\n",p.body_length);
printf("Body : %s\n",p.body);
}
Однако, это вывод, который я имею, если я не ошибаюсь, кажется, что это ASCII может быть? Это не ожидаемый результат.
Magic : _�▒
Version : �▒
Body Length: �▒
Body : ▒
Но когда я пытаюсь напечатать маги c, например:
printf("Magic Test : %d\n",reply_packet.magic[0]);
Magic Test : 95
Это ожидаемый результат, Версия будет 1, и это 1, когда я печатаю его с прецедентом printf, однако я все еще не уверен, как я смогу напечатать тело ... Я думал о том факте, что там не может быть нулевого терминатора, что приводит к выводу мусора в ASCII.
Что я могу сделать, пожалуйста?
Спасибо