gpt4 book ai didi

c - 如何将指向结构的指针从库函数传递回我的 main.c 程序?

转载 作者:太空宇宙 更新时间:2023-11-04 08:55:26 31 4
gpt4 key购买 nike

我的库中定义了一个函数和一个结构。我希望函数返回指向结构的指针。当我尝试编译程序和库时,出现以下错误:

error: incomplete definition of type 'struct _bmpfile'
printf("file size: %d", bmp->header.filesz);
~~~^
/usr/local/include/bmpfile.h:116:16: note: forward declaration of 'struct _bmpfile'

typedef struct _bmpfile bmpfile_t;

该结构在 bmpfile.h 中声明,然后在 bmpfile.c 中定义。我的程序 main.c 调用以下函数,该函数应返回 bmpfile_t:

bmp = bmp_create_from_file(filename);

bmpfile_t*
bmp_create_from_file(const char *filename)
{
FILE *fp;

fp = fopen(filename, "r");
if (fp == NULL) perror("error");

bmpfile_t *bmp = (bmpfile_t *)malloc(sizeof(bmpfile_t));

bmp_get_header_from_file(fp, bmp);
bmp_get_dib_from_file(fp, bmp);
bmp_get_pixels_from_file(fp, bmp);
fclose(fp);
return bmp;
}

最佳答案

printf 调用需要结构的完整定义才能访问成员。

库通常只在头文件中声明结构的名称,因此包含头文件的文件可以在不知道内容的情况下操作指向类型的指针。该结构被视为不透明。这大致相当于声明所有成员私有(private)。

出于黑客目的,您可以将结构定义粘贴到主文件中并查看结构中的值。但是对于“生产”代码,永远不要这样做,句号,句末(除非你有一个非常非常非常好的理由,但要准备好向任何可能看到代码的人解释这个原因!)。

正如 paulsm4 所说,您可以使用 bmp_header_t bmp_get_header(bmpfile_t *bmp); 获取您可以访问的 header 对象。

关于c - 如何将指向结构的指针从库函数传递回我的 main.c 程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17376461/

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