Das folgende Programm und seine Ausgabe zeigen, dass INET_ADDRSTRLEN
als 16
definiert ist und INET_ADDRSTRLEN
als 46
definiert ist.
Hier ist das Programm.
%Vor%Hier ist die Ausgabe.
%Vor% Ich kann verstehen, warum INET_ADDRSTRLEN
16
sein muss. Die größtmögliche Zeichenfolgendarstellung einer IPv4-Adresse belegt 15 Bytes, z. %Code%. Daher sind 16 Bytes erforderlich, um eine solche IP-Adresse mit ihrem abschließenden Nullzeichen zu speichern.
Aber warum muss "255.255.255.255"
INET6_ADDRSTRLEN
sein? Die größtmögliche Zeichenfolgendarstellung einer IPv6-Adresse verbraucht (meines Wissens nach) nur 39 Bytes, z. %Code%. Daher sind nur 40 Bytes erforderlich, um eine solche IP-Adresse mit ihrem abschließenden Nullzeichen zu speichern.
Gibt es eine String-Darstellung einer IPv6-Adresse, die 46 Bytes verbrauchen kann?
Warum ist INET6_ADDRSTRLEN in C als 46 definiert?
Weil POSIX definiert, dass es 46 ist:
INET6_ADDRSTRLEN
46. Länge der Zeichenfolge für IPv6.
Sie haben zwar Recht, dass die längste IPv6-Adresse 39 Byte benötigt, beim IPv4-Tunneling kann die längste Form jedoch aus 45 Byte bestehen:
%Vor%Und das 46. Byte ist für das abschließende Null-Byte (in C ein String). Dies erklärt, wie es zu 46 wurde.