[英]Why is the buffer size in inet_ntoa 18?
我想知道為什么他們都分配了一個 18 個字符的緩沖區。
如果我采用最大長度的 IPv4 地址字符串: 255.255.255.255
,我需要的大小是:每個八位字節為 3,點為 3,空終止符為 1。 3*4+3+1 = 16。
那么為什么我們需要那 2 個額外的字符呢?
第一個鏈接中的inet_ntoa
實現:
static __thread char buffer[18];
char *
inet_ntoa (struct in_addr in)
{
unsigned char *bytes = (unsigned char *) ∈
__snprintf (buffer, sizeof (buffer), "%d.%d.%d.%d",
bytes[0], bytes[1], bytes[2], bytes[3]);
return buffer;
}
如果我采用最大長度的 IPv4 地址字符串:255.255.255.255,我需要的大小是:每個八位字節為 3,點為 3,空終止符為 1。 3*4+3+1 = 16。
那么為什么我們需要那 2 個額外的字符呢?
你的計算是正確的。 僅需要 16 個字節來存儲由inet_ntoa()
生成的點分十進制地址字符串,包括其終止符。 相關文檔和規范至少早在 POSIX.1 2004 就指定了當前格式,據我所知,還沒有發布產生任何其他格式的實現,因此我們只能推測為什么某些實現提供額外的空間。 可能性包括但不限於
今天在許多實現中觀察到相同的額外字節可能支持多用途緩沖區替代方案,但該觀察結果也與在某些早期實現中出現的那些字節的任何解釋一致,也許 BSD,並從那里傳播到許多后續的. 我傾向於支持后一種解釋。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.