вопрос об этой функции strncpy в программировании сокетов - PullRequest
0 голосов
/ 09 апреля 2019

Я сейчас работаю над portcanner для моего приложения сетевого сканера с сокетом в c.я нашел этот код, и я хочу понять, какова здесь точная роль strncpy!и может кто-нибудь, пожалуйста, объясните этот код для моего Потому что я новичок в сетевом программировании и спасибо ..

Ответы [ 2 ]

2 голосов
/ 09 апреля 2019
  1. strncpy((char*)&sa, "", sizeof sa);

    Здесь автор пытается установить 0 для каждого байта sa структуры.

    Согласно strncpy

    Если конец исходной строки C (который сигнализируется нулевой символ) найден до копирования num символов, пункт назначения дополняется нулями, пока общее количество символов не будет было написано к нему.

    На вашем месте я бы сделал это так.

    memset(&sa, 0 , sizeof sa);


  1. strncpy((char*)&sa.sin_addr, (char*) host->h_addr, sizeof sa.sin_addr);

    Здесь Автор пытается скопировать char *h_addr, который содержит первый адрес хоста, в s_addr.

    На вашем месте я бы сделал это так.

    sa.sin_addr.s_addr = inet_addr(host->h_addr);

0 голосов
/ 09 апреля 2019

Ну, похоже, он устанавливает sa бит в ноль. Это, вероятно, эквивалентно

memset(&sa, 0, sizeof sa);

или, если ваш компилятор это позволяет, вы можете использовать

struct sockaddr_in sa = {.sin_family = AF_INET };

и избавиться от

sa.sin_family = AF_INET;
...