Есть ф-ция получения mac-адреса, которая возвращает структуру:
| Код | struct ethip { u_char ar_sha[6]; /* sender hardware address */ u_char ar_spa[4]; /* sender protocol address */ u_char ar_tha[6]; /* target hardware address */ u_char ar_tpa[4]; /* target protocol address */ };
|
Я пытаюсь вывести через printf элементы массива
| Код | printf("%02x:%02x:%02x:%02x:%02x:%02x\n",host1->ar_sha[0],host1->ar_sha[1],host1->ar_sha[2],host1->ar_sha[3],host1->ar_sha[4],host1->ar_sha[5]);
|
На что получаю ошибку сегментирования, но если я делаю вывод циклом ниже, то все хорошо:
| Код | for(i = 0; i < 6; i++) printf("[%d] %02x\n", i, host1->ar_sha[i]);
|
При отладке через gdb, в случаи с оператором printf (без цикла) ошибка в строке | Код | memcpy(addrs->ar_sha, arp_hdr->ar_sha, 6);
|
это строка из ф-ции getmac, а addrs это эта структура которая возвращается.
Почему так проиcходит? |