Не получаю никаких данных в 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;
}