有关套接字编程中此strncpy函数的问题

时间:2019-04-09 12:28:34

标签: c sockets server client strncpy

im当前正在使用c中的套接字为我的网络扫描器应用程序在portscanner上工作。 我找到了这段代码,在这里我想了解strncpy的确切作用是什么!有人可以为我的网络编程初学者解释此代码,谢谢..

2 个答案:

答案 0 :(得分:2)

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

    作者在这里尝试将0设置为sa结构的每个字节。

    按照strncpy

      

    如果源C字符串的结尾(由a表示   在复制num个字符之前找到空字符),   用零填充目的地,直到共有num个字符   已被写入。

    如果我是你,我会这样做。

    memset(&sa, 0 , sizeof sa);


  1. 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;