簡體   English   中英

使用memset將struct sockaddr_in設置為0和'\\ 0'有什么區別?

[英]What would be the difference between setting a struct sockaddr_in to 0 and '\0' using memset?

我剛開始使用C套接字編程。 我已經讀過0作為整數常量,與指針相比是指空指針,而'\\ 0'是指空字符,它將所有位設置為0。並且,在涉及我的問題的情況下,我知道我可能應該使用'\\ 0'。 但是我可以看到很多使用0的實現。 這樣有什么區別? 我不想接受任何可行的方法。 在我明白原因之前,我無法繼續前進。 謝謝!

沒有區別。 他們是平等的。

絕對沒有區別。 請使用0因為您將內存歸零,並且不想像在將char數組的任一元素與'\\0'以表示您要查找空字符時那樣強調內存的任何性質。 。

更准確地說, ' '是一個表達式,它給出一個與指定字符相對應的整數常量。 在這種特殊情況下, '\\0'等於相同的整數0 因此,沒有區別。

它們是等效的。

但是在處理整數時通常使用0 ,而在處理字符或字節時通常使用'\\0'

int n = 0;
char ch = '\0';

對於指針,請使用NULL宏。

memset具有以下原型:

void * memset ( void * ptr, int value, size_t num );

盡管value具有int類型,但它被解釋為字節值。 因此沒有區別。

在C語言中,諸如'x'類的字符文字具有int類型,這意味着'\\0'0不僅在數值上相等,而且在語義上是100%等效的。 它們是相同整數常量的兩個不同拼寫。 您只能使用檢查令牌的拼寫的結構(例如預處理器的###運算符)來區分差異。

(是的,這意味着'\\0'是一個空指針常量。)

char是整數類型,這意味着您可以使用簡單引號(例如'a'使用的字符實際上是整數值。 我邀請您查找ascii ,您將看到字符和整數之間的鏈接。 您可以使用printf()做一些簡單的測試:

printf("%c == %d == %c\n", 'A', 'A', 65);

您會注意到字符'\\0'具有整數值0 ,所以沒有區別,您可以在代碼中使用0'\\0' ,對於編譯器而言,這是相同的。 通常情況下, NULL是一個宏(void *) 0至極是值0澆鑄成通用指針(它仍然是值0 ,但它會被解釋為指針類型)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM