使用指针写出一个函数,判断一个给定的字符串是否为有效的IP地址,输出判断结果。要求两个.连在一起不合法
时间: 2024-05-02 22:23:36 浏览: 89
好的,我来写一个函数来判断给定的字符串是否为有效的IP地址。函数的原型为:
```c
int is_valid_ip_address(const char* ip_address);
```
其中,参数 `ip_address` 表示要判断的IP地址字符串。函数返回值为 `1` 表示该字符串是有效的IP地址,返回值为 `0` 表示该字符串不是有效的IP地址。
以下是我实现的代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int is_valid_ip_address(const char* ip_address) {
if (ip_address == NULL) {
return 0;
}
int num = 0; // 记录当前数字的值
int dots = 0; // 记录当前已经遇到了几个点
int len = strlen(ip_address);
for (int i = 0; i < len; i++) {
if (ip_address[i] >= '0' && ip_address[i] <= '9') {
// 当前字符是数字
num = num * 10 + (ip_address[i] - '0');
if (num > 255 || (i > 0 && ip_address[i-1] == '.' && ip_address[i] == '0')) {
// 如果当前数字大于255,或者出现了以0开头的多位数字
return 0;
}
} else if (ip_address[i] == '.') {
// 当前字符是点
dots++;
if (dots > 3 || (i > 0 && ip_address[i-1] == '.')) {
// 如果当前已经遇到了4个点,或者出现了两个点连在一起
return 0;
}
num = 0; // 重置num
} else {
// 当前字符是非法字符
return 0;
}
}
return (dots == 3) ? 1 : 0; // 如果遇到了4个点,则是有效的IP地址
}
int main() {
char ip1[] = "172.16.254.1";
char ip2[] = "172.16.254.01";
char ip3[] = "172.16.254";
char ip4[] = "172.16.254.1.2";
char ip5[] = "172..16.254.1";
printf("%s is %s.\n", ip1, (is_valid_ip_address(ip1) ? "valid" : "invalid"));
printf("%s is %s.\n", ip2, (is_valid_ip_address(ip2) ? "valid" : "invalid"));
printf("%s is %s.\n", ip3, (is_valid_ip_address(ip3) ? "valid" : "invalid"));
printf("%s is %s.\n", ip4, (is_valid_ip_address(ip4) ? "valid" : "invalid"));
printf("%s is %s.\n", ip5, (is_valid_ip_address(ip5) ? "valid" : "invalid"));
return 0;
}
```
运行结果如下:
```
172.16.254.1 is valid.
172.16.254.01 is invalid.
172.16.254 is invalid.
172.16.254.1.2 is invalid.
172..16.254.1 is invalid.
```
希望能够帮到你!