C语言检测IPv4合法性,防止输入格式错误、异常字符
时间: 2024-10-11 07:08:31 浏览: 52
在C语言中,检测IPv4地址的有效性通常涉及字符串处理和正则表达式(如果库支持)。这里提供一种基本的步骤:
1. **数据预处理**:首先,检查输入是否为有效的字符串,非空并且长度在合理的范围内(通常是4个部分,每部分一到三个数字之间,用点分隔)。
```c
#include <stdio.h>
#include <string.h>
int is_valid_ipv4(char* ip) {
if (ip == NULL || strlen(ip) != 7) return 0;
}
```
2. **分割并验证每个部分**:将IP地址分割成四个部分,然后分别检查每个部分是否是一到三位的数字,并且没有非法字符(如非数字字符或者超过范围的数字)。
```c
char parts[4][4];
if (sscanf(ip, "%d.%d.%d.%d", parts[0], parts[1], parts[2], parts[3]) != 4) return 0;
for (int i = 0; i < 4; i++) {
int num = atoi(parts[i]);
if (num < 0 || num > 255 || strlen(parts[i]) > 3) return 0;
}
```
3. **考虑边界情况**:特别地,对于"0"开头的部分,需要额外检查是否为"000",如果是,则视为无效。
```c
if (parts[0][0] == '0' && parts[0][1] == '0' && parts[0][2] != '\0') return 0;
// 对其他部分做类似检查
```
4. **完整函数示例**:
```c
#include <ctype.h> // for isdigit
// 全局函数,检查IPv4有效性
int validate_ipv4(const char* ip) {
if (!is_valid_ipv4(ip)) return 0;
char parts[4][4];
sscanf(ip, "%d.%d.%d.%d", parts[0], parts[1], parts[2], parts[3]);
for (int i = 0; i < 4; i++) {
char* endptr;
long num = strtol(parts[i], &endptr, 10);
if (*endptr != '\0' || num < 0 || num > 255 || (strchr(parts[i], '.') && strchr(parts[i], ',') || strchr(parts[i], '-'))) {
return 0;
}
}
return 1;
}
int main() {
char ip[] = "192.168.1.1";
if (validate_ipv4(ip)) {
printf("Valid IPv4 address.\n");
} else {
printf("Invalid IPv4 address.\n");
}
return 0;
}
```
阅读全文