尝试在嵌套结构中分配值不起作用

时间:2018-02-16 17:47:16

标签: c

我正在尝试使用嵌套结构来表示我要写入文件的一些数据,但是当我尝试分配第三个数据成员的值并且打开时,该值不会被分配。例如:

typedef struct {
    short numFields;
    char *datasetID;
    double month;
    double day;
} TestHeader;

typedef struct {

    TestHeader header;

} TestFile;

int main()
{

    TestFile* lre = malloc(sizeof(TestFile));

    lre->header.numFields = 2;
    lre->header.datasetID = "BLAHBLAH";
    lre->header.month = 5.0;
    lre->header.day = 6.0;

    printf("%d, %s, %d, %d\n", lre->header.numFields, lre->header.datasetID, lre->header.month, lre->header.day);
}

输出是:

  

2,BLAHBLAH,0,0

为什么?

2 个答案:

答案 0 :(得分:3)

因为您使用了错误的printf()说明符,请尝试

printf("%d, %s, %f, %f\n",
    lre->header.numFields, 
    lre->header.datasetID, 
    lre->header.month, 
    lre->header.day
);

另外,请注意将字符串文字分配给char指针,这样,字符串文字是只读的,而指向它的指针不会反映出来,所以你可能会意外地尝试修改它,导致未定义的行为。

答案 1 :(得分:2)

首先,在使用两个标准库函数时,必须包含相关的头文件,即malloc()printf()

其次,必须为函数printf()的相应参数使用正确的格式说明符;简称为%hd,而%f为双倍。

最后,不要忘记释放动态分配的内存:

#include <stdio.h>
#include <stdlib.h>

typedef struct {
    short numFields;
    char *datasetID;
    double month;
    double day;
} TestHeader;

typedef struct {
    TestHeader header;
} TestFile;

int main()
{
    TestFile* lre = malloc(sizeof(TestFile));

    lre->header.numFields = 2;
    lre->header.datasetID = "BLAHBLAH";
    lre->header.month = 5.0;
    lre->header.day = 6.0;

    printf("%hd, %s, %f, %f\n", lre->header.numFields, lre->header.datasetID, lre->header.month, lre->header.day);

    free(lre);
}