Не получаю никаких данных в sprintf

_export int DSPCmdOut(COMMAND_DESCRIPTOR *cmd)
{
    cmd.u[0] = CMD_SG_SYNCHED;
    cmd.u[1] = uThisStation;
    cmd.u[2] = iMode;
    DSPCmdOut(&cmd);
    return 0;
}

_export int DSPCmdOut(COMMAND_DESCRIPTOR *cmd)
{
    if(S->uCMD > (MAX_CMD-1))
        return -1;
    S->cmd[S->uCMD] = *cmd;
    S->uCMD++;

    sprintf (cLogLine, "%u,%u,%u: cmd data", cmd.u[0],cmd.u[1],cmd.u[2]);                        
    WriteLine  (uhGDSLogFile, cLogLine, strlen(cLogLine));

    return 0;
}

Я получил эту ошибку во время компиляции:

Left operand of . has incompatible type 'pointer to COMMAND_DESCRIPTOR'.

1 ответ

Так как вы передаете указатель на COMMAND_DESCRIPTOR (это структура, я полагаю), чтобы назначить значения для полей структуры, вам нужно разыменовать его.
Итак cmd->u[0] синтаксис просто (*cmd).u[0], -> это просто синтаксис сахара.

менять cmd.u[0] = CMD_SG_SYNCHED; в cmd->u[0] = CMD_SG_SYNCHED; и так далее.

Вот хорошая тема: в чем разница между оператором точка (.) и -> в C++?

Ваш полный код должен выглядеть следующим образом:

_export int DSPCmdOut(COMMAND_DESCRIPTOR *cmd)
{
    cmd->u[0] = CMD_SG_SYNCHED;
    cmd->u[1] = uThisStation;
    cmd->u[2] = iMode;
    DSPCmdOut(&cmd);
    return 0;
}

_export int DSPCmdOut(COMMAND_DESCRIPTOR *cmd)
{
    if(S->uCMD > (MAX_CMD-1))
        return -1;
    S->cmd[S->uCMD] = *cmd;
    S->uCMD++;

    sprintf (cLogLine, "%u,%u,%u: cmd data", cmd->u[0],cmd->u[1],cmd->u[2]);                        
    WriteLine  (uhGDSLogFile, cLogLine, strlen(cLogLine));

    return 0;
}
Другие вопросы по тегам