#c #sockets #server #client #strncpy
#c #сокеты #сервер #клиент #strncpy
Вопрос:
в настоящее время я работаю над сканером портов для своего приложения сетевого сканера с сокетом на c. я нашел этот код, и я хочу понять, какова точная роль strncpy здесь! и может кто-нибудь, пожалуйста, использовать этот код для меня, потому что я новичок в сетевом программировании и спасибо..
Ответ №1:
-
strncpy((char*)amp;sa, "", sizeof sa);
Здесь автор пытается установить
0
для каждого байтаsa
структуры.Согласно strncpy
Если конец исходной строки C (который обозначается нулевым символом) найден до того, как были скопированы символы num, пункт назначения дополняется нулями, пока в него не будет записано всего символов num.
На вашем месте я бы сделал это так.
memset(amp;sa, 0 , sizeof sa);
-
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;