c语言实现判断字符串是否为ip地址
时间: 2024-10-24 07:02:46 浏览: 66
在 C 语言中,判断一个字符串是否是有效的 IP 地址需要对输入的字符串进行解析,并检查它是否符合 IPv4 或 IPv6 的格式。下面是一个简单的示例,仅适用于判断IPv4地址:
```c
#include <stdio.h>
#include <string.h>
#include <arpa/inet.h>
// 判断字符串是否为合法的IPv4地址
int is_valid_ipv4(char* str) {
if (str == NULL || strlen(str) < 7 || strlen(str) > 15) return 0; // 检查长度范围
char num[5]; // 存储每一位数字
int i, octet;
// 分割每个八位数
for (i = 0, octet = 0; i < strlen(str); ++i) {
if (str[i] == '.' && octet != 3) { // 遇到点分隔符
if (inet_pton(AF_INET, num, &octet) == 1) { // 转换为十进制
if (octet <= 255) { // 检查每一段是否在0-255之间
octet = 0;
} else {
return 0;
}
} else {
return 0; // 如果转换失败,不是有效IP
}
} else if (!isdigit(str[i])) {
return 0; // 如果遇到非数字字符且不在首位,不是有效IP
} else {
num[octet++] = str[i];
}
}
// 检查最后一个八位数
if (octet != 4) return 0;
return inet_pton(AF_INET, num, &octet) == 1;
}
int main() {
char ip[] = "192.168.1.1";
if (is_valid_ipv4(ip)) {
printf("%s 是有效的 IPv4 地址。\n", ip);
} else {
printf("%s 不是有效的 IPv4 地址。\n", ip);
}
return 0;
}
```
这个函数首先检查字符串的基本长度,然后尝试分割每个八位数并将其转换为十进制。如果所有部分都是有效的(即介于0-255之间),并且总共四个部分,那么就是有效的 IPv4 地址。
对于更复杂的 IPv6 地址检测,可以使用 `inet_pton` 函数处理,但是语法会复杂一些,因为 IPv6 的结构不同。
阅读全文