【问题标题】:How to initialize a structure pointer with another structure pointer inside by C?如何用C内部的另一个结构指针初始化一个结构指针?
【发布时间】:2015-06-04 13:06:42
【问题描述】:

我尝试通过 C 编程用内部的另一个结构指针初始化一个结构指针,否则我得到分段错误。结构定义如下:

`struct gfcontext_t{
    char *fileContent;
    size_t fileLength;
    char *response;
    int socket_hd;
};

struct gfserver_t{
    char *serverName;
    int serverPort;
    int maxConnection;
    ssize_t (*handler)(struct gfcontext_t *, char *, void * );
    struct gfcontext_t *ctx;
    int status;
};

初始化是在函数内部给出的:

gfserver_t * gfserver_create(){
    struct gfserver_t *gfs;
    gfs=(gfserver_t*) malloc(sizeof(struct gfserver_t));
    ......//how to do the initialization?
    return gfs;
}`

【问题讨论】:

  • 标准警告:请do not castmalloc() 和C 中的家人的返回值。
  • //how to do the initialization?...请展示现有的努力
  • 标准警告 #2:请不要使用 C++ 编译器来编译 C 代码。如果您需要在 C++ 项目中使用一些 C 代码,请将 C 代码(使用 C 编译器)编译为静态或动态目标文件,然后在编译 C++ 代码时将该目标文件链接到您的 C++ 项目(使用 C++ 编译器)。
  • @undefinedbehaviour 是不是有点矫枉过正,如果代码在 C/C++ 子集中?
  • @undefinedbehaviour 抱歉,您怎么知道 OP 使用了 C++ 编译器?

标签: c pointers structure


【解决方案1】:

使用:
gfs->ctx = malloc(sizeof(struct gfcontext_t));
或者如果您还想将 gfcontext_t 成员初始化为 null
gfs->ctx = calloc(1, sizeof(struct gfcontext_t));

【讨论】:

  • 或gfs->ctx = calloc(1, sizeof *gfs->ctx);
  • @JeremyP 对,这更好,因为您不必关心ctx 的类型 :-)
猜你喜欢
  • 2018-09-11
  • 1970-01-01
  • 2014-06-09
  • 2017-07-13
  • 2013-04-16
  • 1970-01-01
  • 2018-04-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多