c语言实现判断字符串是否为子网掩码
时间: 2024-10-24 12:10:50 浏览: 34
C语言中判断两个IPv4地址是否属于同一个子网的代码
在C语言中,判断一个字符串是否为有效的子网掩码(subnet mask),通常需要验证它是否符合IPv4地址的子网掩码格式,即由连续的0和1组成,其中前24位代表网络部分,后8位代表主机部分。你可以通过循环遍历字符串并比较字符来完成这个任务。下面是一个简单的示例函数:
```c
#include <stdbool.h>
#include <string.h>
bool is_valid_subnet_mask(char* subnet) {
int i, len = strlen(subnet);
bool is_zero = true, is_one = false;
// 验证长度是否为32(8位二进制表示)
if (len != 32) {
return false;
}
for (i = 0; i < len; ++i) {
char c = subnet[i];
if (c == '0') {
is_zero = true;
} else if (c == '1') {
is_one = true;
if (!is_zero) {
// 如果当前不是0,但之前有0出现,就返回false
return false;
}
} else {
// 非0和非1都不允许
return false;
}
}
// 最后检查是否有连续的1s,因为子网掩码不会有连续的1
for (i = 1; i < len - 1; ++i) {
if (subnet[i] == '1' && subnet[i + 1] == '1') {
return false;
}
}
return true;
}
// 示例用法
int main() {
char* test_masks[] = {"255.255.255.0", "255.255.255.255", "255.255.0.0", "192.168.1.1"};
size_t num_tests = sizeof(test_masks) / sizeof(test_masks[0]);
for (size_t i = 0; i < num_tests; ++i) {
if (is_valid_subnet_mask(test_masks[i])) {
printf("%s is a valid subnet mask.\n", test_masks[i]);
} else {
printf("%s is not a valid subnet mask.\n", test_masks[i]);
}
}
return 0;
}
阅读全文