在给定为void *的向量内的struct中设置struct值

时间:2013-12-01 18:07:28

标签: c pointers vector struct

我无法设置一个向量值,该值位于作为void指针给出的向量内的struct内的struct中。有点复杂。

这些是定义:

typedef struct
{
    unsigned short int sensor_value[3];
    double accelerometer[3];
} Accelerometer_t;

typedef struct
{
    unsigned short int sensor_value[3];
    double magnetometer[3];
} Magnetometer_t;

typedef struct
{
    unsigned short int sensor_value[3];
    double gyroscope[3];
} Gyroscope_t;

typedef struct 
{
    unsigned short int roll;
    unsigned short int pitch;
    unsigned short int yaw;
} IGRF_diff_t;

typedef struct
{
    Magnetometer_t mag;
    Gyroscope_t gyr;
    Accelerometer_t acc;
    IGRF_diff_t state;
} Attitude_t;

我想用文件中的数据设置传感器的值。我正在使用这个:

fscanf(filefd, "%hx %le", &((Attitude_t *)buffer)[i].acc.sensor_value[0], &((Attitude_t *)buffer)[i].acc.accelerometer[0]);
fscanf(filefd, "%hx %le", &((Attitude_t *)buffer)[i].acc.sensor_value[1], &((Attitude_t *)buffer)[i].acc.accelerometer[1]);
fscanf(filefd, "%hx %le", &((Attitude_t *)buffer)[i].acc.sensor_value[2], &((Attitude_t *)buffer)[i].acc.accelerometer[2]);
fscanf(filefd, "%hx %le", &((Attitude_t *)buffer)[i].mag.sensor_value[0], &((Attitude_t *)buffer)[i].mag.magnetometer[0]);
fscanf(filefd, "%hx %le", &((Attitude_t *)buffer)[i].mag.sensor_value[1], &((Attitude_t *)buffer)[i].mag.magnetometer[1]);
fscanf(filefd, "%hx %le", &((Attitude_t *)buffer)[i].mag.sensor_value[2], &((Attitude_t *)buffer)[i].mag.magnetometer[2]);

缓冲区是一个空的*正确分配为Attitude_t * 1,在这种情况下(但是1可以变化),我的值为0,并且数据正在被正确读取(使用“正常”变量进行测试)。但是指针,转换,向量和结构的迷宫不起作用。它只设置acc.sensor_value [0],acc.accelerometer [0],mag.sensor_value [0],mag.magnetometer [0],依此类推。其余的是零或奇怪的值(默认情况下我假设值)。

1 个答案:

答案 0 :(得分:0)

几乎总是如此,经过数小时的挣扎,当我到达这里并问,我有突然的实现和解决方案。这一次是打印功能(我有一个阅读和打印这个结构的“通用”功能),这是不能正常工作,让我发疯。现在它完美无缺(即使在可怕的版本中)。

感谢您的评论。