文献: 《UNIX网络编程卷1:套接字联网API》
最近,项目中需要网络编程知识,以前很少涉及这部分内容,所以恶意添加了上述文献。 令人惊讶的是,对套接字地址结构执行清零操作时,发现它是一个熟悉的memset (而不是全部bzero )。 为什么?
毕竟,这里结合文献内容进行阐述:
1、bzero ) )好记忆:两个参数;
2、memset ) )容易出错:三个参数且第二个、第三个参数容易混淆,如果位置互换,c编译器不会注意到。
使用
1、bzero ) )函数原型: Externvoidbzero(void*s,int n ) ) ) ) ) ) ) )。
头文件: string.h
功能:集字节字符串s的前n个字节为零,包含“ 0”
说明:没有返回值
2、memset ()。
函数原型: externvoid*memset(void*buffer,int c,int count ) ) ) ) ) ) ) ) )。
头文件: string.h
功能:将buffer指向的内存区域的最初count字节设定为c的值。
例程:
# include string.hvoidmain (int argc,char * argv [ ] (struct sockaddr _ in servaddr ); //套接字地址结构bzero(servaddr,sizeof ) servaddr ); //memset(servaddr,0,sizeof ) (servaddr ); /*Bzero(servaddr,5 ); 短信(servaddr,0,5 ); 即使//0和5的位置错误,c编译器也不报告错误。 (参数类型相同) ) )差异1,bzero ) )来自早期的Berkeley网络编程代码,而不是ANSI C函数,但大多数支持套接字API的制造商提供
2、memset ) )是ANSI C函数,更一般,用途广泛。