В настоящее время я работаю над сканером портов для моего приложения сетевого сканера с сокетом в c . я нашел этот код, и я хочу понять, какова точная роль здесь strncpy! и может кто-нибудь объяснить этот код для меня, потому что я новичок в сетевом программировании и спасибо ..
Что ж, похоже, он устанавливает биты са в ноль. Вероятно, это эквивалентно
memset(&sa, 0, sizeof sa);
или, если ваш компилятор это позволяет, вы можете использовать
struct sockaddr_in sa = {.sin_family = AF_INET };
и избавиться от
sa.sin_family = AF_INET;
strncpy((char*)&sa, "", sizeof sa);
Здесь автор пытается установить 0
для каждого байта sa
структуры.
Согласно strncpy
If the end of the source C string (which is signaled by a null-character) is found before num characters have been copied, destination is padded with zeros until a total of num characters have been written to it.
Если бы я был тобой, я бы сделал это так.
memset(&sa, 0 , sizeof sa);
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);