面试题答案
一键面试#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 检查IP地址格式是否正确
int isValidIP(const char *ip) {
int num, dots = 0;
const char *p = ip;
while (*p) {
if (*p >= '0' && *p <= '9') {
num = 0;
while (*p >= '0' && *p <= '9') {
num = num * 10 + (*p - '0');
p++;
}
if (num > 255) return 0;
} else if (*p == '.') {
dots++;
p++;
} else {
return 0;
}
}
return dots == 3;
}
// 进行NAT转换
char* natConvert(const char *internalIP, const char *externalIP) {
if (!isValidIP(internalIP) ||!isValidIP(externalIP)) {
return NULL;
}
char *result = (char*)malloc(strlen(externalIP) + 1);
if (result == NULL) {
return NULL;
}
strcpy(result, externalIP);
return result;
}
你可以使用以下方式调用这个函数:
int main() {
const char *internalIP = "192.168.1.100";
const char *externalIP = "202.100.1.50";
char *convertedIP = natConvert(internalIP, externalIP);
if (convertedIP) {
printf("转换后的IP地址: %s\n", convertedIP);
free(convertedIP);
} else {
printf("IP地址格式不正确\n");
}
return 0;
}
上述代码中:
isValidIP
函数用于检查传入的IP地址格式是否正确,确保IP地址是点分十进制形式且每个部分的值在0到255之间。natConvert
函数首先检查内部和外部IP地址格式是否正确,如果不正确则返回NULL
。如果格式正确,则分配内存并将外部IP地址复制到新的字符串中返回。- 在
main
函数中,演示了如何调用natConvert
函数,并根据返回结果进行相应处理。记得释放分配的内存以避免内存泄漏。