如何在C99中使用struct和malloc

时间:2014-05-09 08:35:36

标签: c struct malloc

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

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

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

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

3 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:2)

您既可以像@icepack那样说,也可以像这样更改结构定义:

typedef struct  {
    int data[256];
} TransferData;

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

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

readData = malloc(sizeof(*readData));

但使用此样式时请注意不要意外传递指针的大小。

如果没有typedef,您需要在C中编写struct StructType,这在C ++中并不需要。如评论中所述,在C中不需要转换malloc的结果,只会使代码混乱。在C ++中这是必要的,但你不应该在那里使用malloc

答案 2 :(得分:1)

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

readData = malloc(sizeof(*readData));