c - 为什么我们在套接字编程c中使用memset将结构填充为0?
问题描述
struct sockaddr_in servaddr, cliaddr;
// Creating socket file descriptor
if ( (sockfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0 ) {
perror("socket creation failed");
exit(EXIT_FAILURE);
}
memset(&servaddr, 0, sizeof(servaddr));
memset(&cliaddr, 0, sizeof(cliaddr));
在我之前关于结构的工作中,我没有用值 0 填充结构,但是在套接字中,我们总是在使用结构之前重置,填充 0。为什么将结构填充为 0 很重要?
解决方案
除非变量被声明为静态存储持续时间,否则它们在创建时将具有任意值。因此,在使用它们之前将它们设置为已知值总是一个好主意。
例如,如果您的下一步socket()
是connect()
or bind()
,他们将非常希望分别为客户端或服务器提供特定的结构值。
它与功能没有什么不同:
void xyzzy(void) {
int plugh;
printf("%d\n", plugh);
}
因为它可以打印任何值。
推荐阅读
- nuxt.js - $validator undefined vee-validate NuxtJS
- opencv - 出现错误 - 使用 Socketio 将视频帧从客户端传输到烧瓶服务器时,“PngImageFile”对象没有属性“形状”
- java - 无法在 servlet 中 @Autowired spring bean
- c++ - 如何获取 Windows 上已安装字体的列表,包括使用 C++ 的字体样式
- java - 在文件系统中找不到为 log4j 生成的文件日志
- rust - 如何使用 Rust 的 FFI 从 C 中获取输出字符串参数?
- java - 尝试创建一个哈希表以从文本文件中获取一个数组列表 - Java
- java - 下面的代码用于删除排序链表中的重复项
- jquery - 如何从mongodb加载用户相关数据
- angular - 如何设置 mat-table 列宽的宽度