我有这个C代码:
struct ATAInfo* data;
data = (struct ATAInfo*)malloc(512);
然后我调用一个填充结构的函数。这有点难以解释,因为我调用了一个函数,通过中断进行系统调用,从而从我的cd-rom设备读取信息。 我这样称呼它:
ata_identify(0, data)
功能定义如下:
bool ataIdentify(int device, struct ATAInfo *ataInfo){
现在我填写:
uint16_t pointer = ataInfo;
uint16_t word;
for (int i = 0; i < 256; i++)
{
word = inw(DATA_PORT);
*(uint16_t *) pointer = word;
pointer ++;
}
现在我想从结构中读取一个属性,它被声明为:
uint8_t ModelNumber[40];
我这样做了:
printf("name: %s\n", data->ModelNumber);
但我得到“name:(null)”。
答案 0 :(得分:1)
这段代码似乎不正确:
uint16_t pointer = ataInfo;
uint16_t word;
for (int i = 0; i < 256; i++)
{
word = inw(DATA_PORT);
*(uint16_t *) pointer = word;
pointer ++;
}
你的意思是:
uint16_t* pointer = (unit16_t*)ataInfo;
uint16_t word;
for (int i = 0; i < 256; i++)
{
word = inw(DATA_PORT);
*pointer = word;
pointer ++;
}