C 如何从结构中读取数组?

C 如何从结构中读取数组?,c,struct,C,Struct,我有一个C代码: struct ATAInfo* data; data = (struct ATAInfo*)malloc(512); 然后我调用一个函数,它填充结构。这有点难以解释,因为我调用一个函数,通过一个中断进行系统调用,该中断从我的cd-rom设备读取信息。 我这样称呼它: ata_identify(0, data) 函数的定义如下: bool ataIdentify(int device, struct ATAInfo *ataInfo){ uint8_t ModelNumb

我有一个C代码:

struct ATAInfo* data;

data = (struct ATAInfo*)malloc(512);
然后我调用一个函数,它填充结构。这有点难以解释,因为我调用一个函数,通过一个中断进行系统调用,该中断从我的cd-rom设备读取信息。 我这样称呼它:

ata_identify(0, data)
函数的定义如下:

bool ataIdentify(int device, struct ATAInfo *ataInfo){
uint8_t ModelNumber[40];
现在我用这个来填充它:

uint16_t pointer = ataInfo;
uint16_t word;
for (int i = 0; i < 256; i++)
{
    word = inw(DATA_PORT);
    *(uint16_t *) pointer = word;
    pointer ++;
}
我这样做:

printf("name: %s\n", data->ModelNumber);

但是我得到了“name:(null)”。

这段代码似乎不正确:

uint16_t pointer = ataInfo;
uint16_t word;
for (int i = 0; i < 256; i++)
{
    word = inw(DATA_PORT);
    *(uint16_t *) pointer = word;
    pointer ++;
}
uint16\u t指针=ataInfo;
uint16_t单词;
对于(int i=0;i<256;i++)
{
word=inw(数据端口);
*(uint16_t*)指针=字;
指针++;
}
你是说:

uint16_t* pointer = (unit16_t*)ataInfo;
uint16_t word;
for (int i = 0; i < 256; i++)
{
    word = inw(DATA_PORT);
    *pointer = word;
    pointer ++;
}
uint16\u t*指针=(unit16\u t*)ataInfo;
uint16_t单词;
对于(int i=0;i<256;i++)
{
word=inw(数据端口);
*指针=字;
指针++;
}

应该是:
data=malloc(sizeof(*data))删除C++标签(除非你想注释你不应该使用<代码> MalOC ,使用<代码> IoSturis而不是<代码> Prtff 等)。可能与函数“填充结构”有关。请给出一个最小的、可编译的示例,重现该问题。声明的行为甚至不应该是可能的-
ModelNumber
是结构的数组成员(不是指针),因此它不能为NULL。您能提供更多信息吗?i、 e.2东西:结构定义,以及填充相关成员的任何函数的函数定义。(然后我调用一个函数,填充结构。)用这两个函数编辑你的帖子,答案会更完整。哦,是的,谢谢。但遗憾的是,它也不起作用。