为什么下面的代码导致了frag错误?

时间:2014-07-25 12:13:19

标签: c network-programming

int main(int argc, char *argv[]){
struct protoent *proto;

char **p_aliases;


if(argv[1]==NULL){
    char name[25];

    printf(" give a valide protocol name\n");
    scanf("%s",name);
    proto = getprotobyname(name);
}
else{
    proto = getprotobyname(argv[1]);
}
if(argv[1]==NULL){



    printf("%s the protocol name is :\n",proto->p_name);
    printf("%s the protocol alias  is\n",proto->p_aliases);
    printf("%d the protocol number is \n",proto->p_proto);

    return 0;
    }
}

//我没有得到正确的输出,只是一个碎片错误

1 个答案:

答案 0 :(得分:0)

此代码出现问题:

  1. argvc < 2会比argv[1] == NULL更强大,不过这可能不是问题。

  2. 没有什么可以阻止scanf阅读超过您分配的25个字符。

  3. 如果if为非空,则第二个argv[1]将表示 no 输出。

  4. getprotobyname在无法识别名称时返回空指针,但您不进行检查。

  5. 您尝试打印proto->p_aliases,但其类型为char **,因此您可能需要打印proto->p_aliases[0](并且应该检查它是非空的)。< / p>

  6. 无论如何,除了这一切之外,当你遇到seg故障时,最好在调试器下运行代码,然后再请求其他人为你工作。调试器可能会告诉您问题的确切位置,如果不存在,您可以逐步完成代码并将其缩小范围。