gpt4 book ai didi

c - 为什么下面的代码会导致碎片错误?

转载 作者:行者123 更新时间:2023-11-30 17:30:47 25 4
gpt4 key购买 nike

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. argvc < 2会比 argv[1] == NULL 更强大,尽管这可能不是这里的问题。

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

  3. 第二个if意味着根本没有输出,如果 argv[1]是非空的。

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

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

无论如何,除此之外,当您遇到段错误时,最好先在调试器下运行代码,然后再要求其他人为您完成工作。调试器可能会准确地告诉您问题出在哪里,如果没有,您可以单步执行代码并轻松缩小范围。

关于c - 为什么下面的代码会导致碎片错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24955562/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com