【问题标题】:How to use struct and malloc in C99 [closed]如何在 C99 中使用 struct 和 malloc [关闭]
【发布时间】:2014-05-09 08:35:36
【问题描述】:

我需要将我的 C++ 代码翻译成 C99:

struct TransferData  {
    int data[256];
} *readData;    

readData = (TransferData  *) malloc(sizeof(struct TransferData));       

我几乎尝试了所有方法,但每次都会出现编译器错误。 有人可以帮忙吗?

【问题讨论】:

标签: c struct malloc


【解决方案1】:

对于C,您需要转换为struct TransferData *,而不是TransferData *。您没有名为 TransferData * 的类型(或完全放弃演员表,但这是另一场圣战,恕我直言,毫无意义)。

【讨论】:

    【解决方案2】:

    你可以像@icepack 说的那样做,或者像这样改变你的结构定义:

    typedef struct  {
        int data[256];
    } TransferData;
    
    TransferData *readData;
    readData = malloc(sizeof(TransferData));
    

    编辑:请注意,最好将 sizeof 与变量而不是类型一起使用以避免重复:

    readData = malloc(sizeof(*readData));
    

    但注意不要在使用这种样式时不小心传递了指针的大小。

    没有typedef,您需要用C 编写struct StructType,而在C++ 中不需要。正如 cmets 中所说,在 C 中强制转换 malloc 的结果是不必要的,只会使您的代码混乱。在 C++ 中是必需的,但您不应该在那里使用 malloc

    【讨论】:

      【解决方案3】:

      如果您使用C,则不应转换malloc 的结果。重复类型信息是一种不好的风格。此外,结构的类型是struct TransferData,而不是TransferData,如C++。我建议

      readData = malloc(sizeof(*readData));    
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-16
        • 1970-01-01
        • 2021-11-27
        • 1970-01-01
        • 1970-01-01
        • 2012-07-24
        • 1970-01-01
        • 2017-05-01
        相关资源
        最近更新 更多