C 编程 memset arpa.inet

Posted

技术标签:

【中文标题】C 编程 memset arpa.inet【英文标题】:C programming memset arpa.inet 【发布时间】:2017-05-28 23:09:46 【问题描述】:

嘿,对不起,我是 C 的新手,但是我从教程点找到了那里的代码,我只是想知道他们使用 \0in memset 函数是否有特定原因?还是只是随机的??

#include <arpa/inet.h>

(...)

   int retval;
   struct in_addr addrptr

   memset(&addrptr, '\0', sizeof(addrptr));
   retval = inet_aton("68.178.157.132", &addrptr);

【问题讨论】:

通常使用空字符将内存的值设置为空\0,这样如果您在设置之前访问内存,您不会从以前的内存使用中得到意外的值。 所以 \0 表示 null 对吗? 没错。 嘿,那里!如果您将此站点与教程点支持论坛混淆:我们不是。 @D.R.:\0 什么都不是。你的意思是'\0',它是一个int,与0相同。补充一点:这仅适用于整数数组。对于所有其他(浮点数、指针等),如果您追求可移植代码,它几乎没有用处。 【参考方案1】:

'\0' 是 NUL(即 NUL 而非 NULL)字符(值 = 0),这是一个合理的默认值,可将内存设置为。

请注意,术语 NULL 通常是为指针保留的。

【讨论】:

是否有一个函数可以让我将 '\0' null 放到整个内存中?一个我可以访问整个内存的函数 @user7387002 “整个内存”是什么意思? memset 设置一个指定大小的块 - 如果你需要不同的东西,那么听起来你“做错了”。【参考方案2】:

空字符\0 会将相关内存设置为空值。这很有用,因为内存在被释放时并不总是“擦除”,因此它仍然可以从之前使用该内存块的任何内容中获得一个值。通过初始化为 null,您可以保证不会得到意外的值。

【讨论】:

是否有一个函数可以让我将 '\0' null 放到整个内存中?一个我可以访问整个内存的函数 将所有位归零并不能保证空指针或“0.=”浮动。因此,它充其量只是一种糟糕的风格,实际上是有缺陷的。

以上是关于C 编程 memset arpa.inet的主要内容,如果未能解决你的问题,请参考以下文章

网络编程之socket编程实例

socket编程热身程序

网络编程模型——基础模板

用纯C语言 怎样编程,解析HTTP协议。

linux下socket编程-UDP

无法打开包含文件:'arpa/inet.h':[关闭]