今天学习了唐佐林老师的网络课程,记录一下发现的收获。
1. inet_ntoachar *inet_ntoa(struct in_addr in); // 这个函数返回的指针是一块固定的空间, 使用的时候需要注意防止覆盖
demo :
#include#include #include #include #include #include #include int main() { struct in_addr addr1 = {0x08070605}; struct in_addr addr2 = {0x04030201}; const char *s1 = inet_ntoa(addr1); printf("#line %d,addr1 = %sn",__LINE__,s1); const char *s2 = inet_ntoa(addr2); printf("#line %d,addr2 = %sn",__LINE__,s2); printf("----------------------------------n"); printf("#line %d,addr1 = %s,pointer = %pn",__LINE__,s1,s1); printf("#line %d,addr2 = %s,pointer = %pn",__LINE__,s2,s2); printf("----------------------------------n"); char *s11 = strcpy((char *)malloc(32),inet_ntoa(addr1)); char *s12 = strcpy((char *)malloc(32),inet_ntoa(addr2)); printf("#line %d,addr1 = %sn",__LINE__,s11); printf("#line %d,addr2 = %sn",__LINE__,s12); free(s11); free(s12); }
root@jeason:~/network# g++ ntoa.cpp root@jeason:~/network# ./a.out #line 13,addr1 = 5.6.7.8 #line 15,addr2 = 1.2.3.4 ---------------------------------- #line 17,addr1 = 1.2.3.4,pointer = 0x7f7c7a443550 #line 18,addr2 = 1.2.3.4,pointer = 0x7f7c7a443550 ---------------------------------- #line 22,addr1 = 5.6.7.8 #line 23,addr2 = 1.2.3.42. 有更优雅的地址转换方案 ,可以帮助进行地址合法检查
#include#include #include #include #include #include #include int main() { struct in_addr addr1; if(inet_aton("1.2.3.4",&addr1)){ printf("#line %d,vaild addr .... addr1 = %xn",__LINE__,addr1.s_addr); }else{ printf("#line %d,invaild addr ....n",__LINE__); } if(inet_aton("test str",&addr1)){ printf("#line %d,vaild addr .... addr1 = %xn",__LINE__,addr1.s_addr); }else{ printf("#line %d,invaild addr ....n",__LINE__); } return 0 }
root@jeason:~/network# g++ ntoa.cpp root@jeason:~/network# ./a.out #line 13,vaild addr .... addr1 = 4030201 #line 20,invaild addr .... root@jeason:~/network#
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)