im当前正在使用c中的套接字为我的网络扫描器应用程序在portscanner上工作。 我找到了这段代码,在这里我想了解strncpy的确切作用是什么!有人可以为我的网络编程初学者解释此代码,谢谢..
答案 0 :(得分:2)
strncpy((char*)&sa, "", sizeof sa);
作者在这里尝试将0
设置为sa
结构的每个字节。
按照strncpy
如果源C字符串的结尾(由a表示 在复制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);
答案 1 :(得分:0)
好吧,它似乎将 sa 位设置为零。 大概等于
memset(&sa, 0, sizeof sa);
或者,如果编译器允许,则可以使用
struct sockaddr_in sa = {.sin_family = AF_INET };
摆脱
sa.sin_family = AF_INET;