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;
}
}
//我没有得到正确的输出,只是一个碎片错误
答案 0 :(得分:0)
此代码出现问题:
argvc < 2
会比argv[1] == NULL
更强大,不过这可能不是问题。
没有什么可以阻止scanf
阅读超过您分配的25个字符。
如果if
为非空,则第二个argv[1]
将表示 no 输出。
getprotobyname
在无法识别名称时返回空指针,但您不进行检查。
您尝试打印proto->p_aliases
,但其类型为char **
,因此您可能需要打印proto->p_aliases[0]
(并且应该检查它是非空的)。< / p>
无论如何,除了这一切之外,当你遇到seg故障时,最好在调试器下运行代码,然后再请求其他人为你工作。调试器可能会告诉您问题的确切位置,如果不存在,您可以逐步完成代码并将其缩小范围。