вопрос об этой функции strncpy в программировании сокетов

#c #sockets #server #client #strncpy

#c #сокеты #сервер #клиент #strncpy

Вопрос:

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

Ответ №1:

  1. strncpy((char*)amp;sa, "", sizeof sa);

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

    Согласно strncpy

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

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

    memset(amp;sa, 0 , sizeof sa);


  1. strncpy((char*)amp;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);

Ответ №2:

Ну, похоже, что он устанавливает биты sa равными нулю. Вероятно, это эквивалентно

 memset(amp;sa, 0, sizeof sa);
  

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

 struct sockaddr_in sa = {.sin_family = AF_INET };
  

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

 sa.sin_family = AF_INET;