im 目前正在为我的网络扫描仪应用程序在 Portscanner 上工作,并在 C 中带有套接字。我找到了这段代码,我想了解strncpy在这里的确切作用是什么!有人可以为我的网络编程初学者解释这段代码,谢谢..
-
strncpy((char*)&sa, "", sizeof sa);
在这里,作者试图
0
设置为sa
结构的每个字节。根据 strncpy
如果源 C 字符串的末尾(由 空字符(在复制 num 字符之前找到, 目标用零填充,直到总共 num 字符数 被写到它。
如果我是你,我会这样做。
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);
好吧,看起来它将 sa 位设置为零。它可能相当于
memset(&sa, 0, sizeof sa);
或者,如果您的编译器允许,您可以使用
struct sockaddr_in sa = {.sin_family = AF_INET };
并摆脱
sa.sin_family = AF_INET;