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个错误!

10-08 17:59