在调用 inet_pton
函数解析 IPv6 地址时,不需要携带中括号([]
)。中括号通常在字符串形式的 IPv6 地址用于区分端口号时使用(例如 [fe80::1]:8080
),但 inet_pton
只需要纯粹的 IPv6 地址部分。
正确用法示例:
#include <arpa/inet.h>
#include <stdio.h>
int main() {
const char *ipv6_str = "fe80::1"; // 不带中括号
struct in6_addr addr;
if (inet_pton(AF_INET6, ipv6_str, &addr) == 1) {
printf("IPv6 address parsed successfully.\n");
} else {
perror("Parsing failed");
}
return 0;
}
关键点:
- 输入格式:直接传入标准的 IPv6 地址字符串(如
"fe80::1"
),无需[]
。 - 端口号场景:如果地址包含端口号(如
"[fe80::1]:8080"
),需要先手动去除[]:
和端口部分,再调用inet_pton
。 - 函数行为:
inet_pton
严格解析纯地址,不处理额外符号。
常见错误:
- 错误输入:
"[fe80::1]"
结果:解析失败,返回0
(非法的地址格式)。
如果需要处理带端口的字符串,可以先用字符串操作提取 IPv6 部分后再解析。
内容由零声教学AI助手提供,问题来源于学员提问