Похоже, вы печатаете sender_IP_low
в виде строки, и, поскольку она не заканчивается нулем, процедура печати продолжает печатать соседний буфер, sender_IP_hi
.И вам, вероятно, просто повезло, что процедура печати находит ноль и останавливается перед ошибкой сегментации.
Одно быстрое исправление:
void int2bin(u_int16_t addr_IP, char *Binary) {
...
Binary[16] = 0; // terminate the string before returning
}
...
char sender_IP_hi[17], sender_IP_low[17]; // +1 for null terminator
Хотя есть и несколько другихможет быть исправлено в вашей реализации, я просто хотел сосредоточиться на ответе на ваш оригинальный вопрос.