C 编程 memset arpa.inet
Posted
技术标签:
【中文标题】C 编程 memset arpa.inet【英文标题】:C programming memset arpa.inet 【发布时间】:2017-05-28 23:09:46 【问题描述】:嘿,对不起,我是 C 的新手,但是我从教程点找到了那里的代码,我只是想知道他们使用 \0
in 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的主要内容,如果未能解决你的问题,请参考以下文章