打印初始化的结构

用户名

以下代码是打印原型结构。

除非我getprotoent()初始化结构变量,否则我将无法打印该结构变量。

如果我不这样做,就结束了细分的步履蹒跚 getprotoent().

有人知道吗?

萨姆

#include <stdio.h>
#include <string.h>
#include <netdb.h>
int
main(){
        struct protoent *proto;
        memset(&proto,0,sizeof(proto));
        proto = getprotoent();

        printf("proto.p_name = %s\n",(*proto).p_name);
        printf("proto.p_aliases = %s\n",*(*proto).p_aliases);
        printf("proto.p_proto = %d\n",(*proto).p_proto);
}
你不担心孩子

您应该使用:

struct protoent proto;
memset(&proto,0,sizeof(proto));

作为*proto指向结构的指针,它只能保存struct protoent类型变量的地址您的陈述实际上并未初始化结构。

更多说明:

struct protoent *proto;
memset(&proto,0,sizeof(proto));

在某些系统上,这可能与 struct protoent *proto = NULL;

由于您实际上是“将0分配给指针

之后,您将在printf语句中取消引用它,这肯定会导致seg错误。

编辑/更新在评论中user694733建议

并非所有系统都将地址分配0给NULL指针。它是对保留的某些地址的转换NULL,编译时您将保留地址<datatype> *ptr = 0;但是这样做memset(&ptr,0,sizeof(ptr));会不会被编译器可以理解为NULL assignment在这些系统上,它会简单地分配地址0ptr它,因为我说可能不是一个NULL

要了解更多信息,请阅读此链接有关指针的完整C-FAQ章节NULL

我也想在SO上引用这个相关的答案

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章