[解決済み] C言語ではINET6_ADDRSTRLENはなぜ46と定義されているのですか?
2022-02-07 17:12:58
質問
次のプログラムとその出力は、次のことを示しています。
INET_ADDRSTRLEN
は次のように定義されます。
16
と
INET6_ADDRSTRLEN
は次のように定義されます。
46
.
以下はそのプログラムです。
#include <stdio.h>
#include <arpa/inet.h>
int main()
{
printf("%d\n", INET_ADDRSTRLEN);
printf("%d\n", INET6_ADDRSTRLEN);
return 0;
}
以下はその出力です。
16
46
の理由は理解できる。
INET_ADDRSTRLEN
にする必要があります。
16
. IPv4アドレスの最大文字列表現は、15バイトを消費します。
"255.255.255.255"
. したがって、このようなIPアドレスとその末尾のヌル文字を格納するには、16バイトが必要です。
しかし、なぜ
INET6_ADDRSTRLEN
である必要があります。
46
? IPv6アドレスの最大可能文字列表現は、39バイトしか消費しません(私の知る限りでは)。
"ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff"
. したがって、このようなIPアドレスとその末尾のヌル文字を格納するのに必要なバイト数は、わずか40バイトです。
46バイトを消費するIPv6アドレスの文字列表現はあるのでしょうか?
どのように解決するのですか?
<ブロッククオートなぜC言語ではINET6_ADDRSTRLENが46と定義されているのですか?
なぜなら POSIX は46と定義しています。
inet6_addrstrlen
46. IPv6用の文字列フォームの長さ。
IPv6アドレスの最長形式が39バイトであることはその通りですが、IPv4トンネリングでは最長形式が45バイトになることがあります。
ffff:ffff:ffff:ffff:ffff:ffff:255.255.255.255
そして46バイト目は、終端のヌルバイト(C言語では文字列)用です。これで46になった経緯がわかります。
関連
-
[解決済み】ポインタへの代入時に互換性のないポインタ型からの初期化警告が発生した
-
[解決済み】 error: too few arguments to function `printDay' (C言語)
-
[解決済み】 switch case: error: case label does not reduce to an integer constant
-
[解決済み】C言語でint64_t型を表示する方法
-
[解決済み】LinuxのI_PUSHに相当するもの
-
[解決済み] 配列の場合、なぜ a[5] == 5[a] になるのでしょうか?
-
[解決済み] Cプリプロセッサはなぜ "linux "という単語を定数 "1 "と解釈するのですか?
-
[解決済み] マクロで無意味なdo-while文やif-else文を使っているのはなぜですか?
-
[解決済み] 未定義、未指定、および実装で定義された動作
-
[解決済み】なぜこれらのコンストラクトはプリインクリメントとポストインクリメントを使用して未定義の動作をしているのでしょうか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】警告:互換性のないポインタ型からの代入
-
[解決済み】ポインタへの代入時に互換性のないポインタ型からの初期化警告が発生した
-
[解決済み】エラー:'for'ループの初期宣言はC99モードでしかできない【重複
-
[解決済み】GCC Cコードで静的宣言が非静的宣言に続くことを解決するには?
-
[解決済み】 error: too few arguments to function `printDay' (C言語)
-
[解決済み】C言語で浮動小数点例外(コアダンプ)発生
-
[解決済み】メモリー・クロバリング・エラー
-
[解決済み】0LLや0x0ULの意味は何ですか?
-
[解決済み】配列型char[]が代入できない [重複]。
-
[解決済み] IPv6アドレスのテキスト表現の最大長?