c - 头文件帮助和结构

标签 c struct header malloc

我有一个头文件,dimensions.h,其中:

#ifndef DIM_H
#define DIM_H

typedef struct Dimensions
{
    int width;
    int height;
} DIM;

DIM * GetHeader (FILE * fp);

#endif

从这里我有一个 c 文件,其中包含以下内容:

#include "dimensions.h"
.
.
.
DIM *  GetHeader (FILE * fp)
{
    char s[1024];
    struct Dimensions * d = (struct Dimensions *)malloc(sizeof(Dimensions));

    if (fgets(s, sizeof(s), fp) != NULL)
    {
        printf("%s", s);
        d->width = atoi(strtok(s, " \n\0"));
        d->height = atoi(strtok(NULL, " \n\0"));
    }

    return d;
}

但是当我运行它时,我收到诸如 Dimensions undeclared 之类的错误。因此,我尝试将 Dimensions 更改为 DIM 的代码(仍然没有真正理解这两个名称“scheme”。

struct DIM * d = (struct DIM *)malloc(sizeof(DIM));

然后我收到 d->widthd->height 的错误,说它取消引用指向不完整类型的指针,所以我交换了 ->.,然后出现错误请求非结构或 union 中的成员宽度/高度

所以不太确定发生了什么,可能是我错过的非常简单的事情,所以如果有人可以提供帮助那就太棒了。

谢谢!

最佳答案

第 1 部分:未声明尺寸

在您的原始代码中看到这一行吗?

struct Dimensions * d = (struct Dimensions *)malloc(sizeof(Dimensions));

如果您在某处使用struct Dimensions,请在任何地方使用它。将 sizeof 更改为

sizeof(struct Dimensions)

并且未声明的维度应该消失。

第 2 部分:DIM 版本

您的代码:

struct DIM * d = (struct DIM *)malloc(sizeof(DIM));

当您typedef struct {...} DIM时,您只需将其引用为DIM - 而不是struct DIM

DIM * d = (DIM *)malloc(sizeof(DIM));

第 3 部分:将 -> 交换。

当左侧是指向结构的指针时,使用 ->;当左侧只是一个结构时,使用 .

tl;博士

struct Dimensions * d = (struct Dimensions *)malloc(sizeof(struct Dimensions));

应该修复你的代码。

关于c - 头文件帮助和结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16073553/

相关文章:

css - 导航栏未跨越页面宽度

C++:我什么时候应该使用结构而不是类,速度差异在哪里?

关于 C 的 stat() 函数的令人困惑的文档

html - 透明标题被主 div 溢出

c - 多次执行的性能分析

c# - 将 C++ 结构体 union 转换为 C#

GitHub README.md 文件显示 '#' 符号,而不是呈现为 <headers>

c - 在不交换数据的情况下交换链表中的节点

c++ - Malloc/VirtualAlloc 在 127 dec 之后预置 FFFFFF

c - 如何使用整数除法降低采样率?