2017-05-28 25 views
-1

嘿,對不起,我是C上的新手,但代碼在那裏我發現它來自教程點,我只是想知道是否有一個特定的原因,他們爲什麼在memset函數中使用\0?還是隻是隨機?C編程memset arpa.inet

#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',這樣如果您在設置內存之前訪問內存,則不會從以前使用內存獲取意外的值。 –

+0

so \ 0表示無效嗎? – user7387002

+0

這是正確的。 –

回答

-1

空字符\0將設置有問題的內存爲空值。這很有用,因爲內存在釋放時並不總是「擦除」,所以它可能仍然具有先前使用該內存塊的任何值。通過初始化爲null,你保證你不會得到意想不到的值。

+0

是否有一個函數可以將'\ 0'null寫入整個內存?一個函數,我可以訪問整個內存 – user7387002

+0

歸零所有位不保證空指針或'0. ='浮點數。因此它至多是壞風格,實際上是有缺陷的。 – Olaf

0

'\0'是NUL(即NUL非NULL)字符(值= 0),這是一個合理的默認值來設置內存。

請注意,術語NULL通常爲指針保留。

+0

有沒有一個函數,我可以把'\ 0'空到整個內存?一個功能,我可以訪問整個內存 – user7387002

+0

@ user7387002你是什麼意思「整個內存」? 'memset'設置了一個指定大小的塊 - 如果你需要不同的東西,那聽起來你就是「做錯了」。 – John3136