我正在尝试使用嵌套结构来表示我要写入文件的一些数据,但是当我尝试分配第三个数据成员的值并且打开时,该值不会被分配。例如:
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
为什么?
答案 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);
}