void main(int argc, char* argv[]) {
char* hostname = (char*)malloc(sizeof(char)*1024);
hostname = getClientHostName("122.205.26.34");
printf("%s\n", hostname);
free(hostname);
}
char* getClientHostName(char* client_ip) {
char hostnames[5][2];
hostnames[0][0] = "122.205.26.34";
hostnames[0][1] = "aaaaa";
hostnames[1][0] = "120.205.36.30";
hostnames[1][1] = "bbbbb";
hostnames[2][0] = "120.205.16.36";
hostnames[2][1] = "ccccc";
hostnames[3][0] = "149.205.36.46";
hostnames[3][1] = "dddddd";
hostnames[4][0] = "169.205.36.33";
hostnames[4][1] = "eeeeee";
for(int i = 0; i<5; i++) {
if(!strcmp(hostnames[i][0], client_ip))
return (char*)hostnames[i][1];
}
return NULL;
}
C语言入门
我不确定是否有更好的方法来实现我要实现的目标。该代码是不言自明的。有什么办法可以使用IP地址的一些常规大小来预定义主机名的大小,以避免seg错误?有没有一种更好的方法可以不必对尺寸进行硬编码?
最佳答案
将*
添加到类型定义char * hostnames[5][2]
。这必须是指针数组,而不是简单的char
。另一个必要的更改是strcpy
而不是=
中的strcpy( hostname, getClientHostName("122.205.26.34") );
。
PS:始终尝试使用0个编译器警告进行编译,而不仅是0个错误!