sscanf_s: строка формата "% d" требует аргумент типа "int *", но аргумент 4 переменной имеет тип "WORD *" - PullRequest
0 голосов
/ 18 марта 2019
SYSTEMTIME ConvertStringToSystemTime(const char *dateTimeString) const 
{

    SYSTEMTIME systime;
    memset(&systime, 0, sizeof(systime));
    // Date string should be "dd-MM-yyyy hh:mm:ss:mss"
    auto u = sscanf_s(dateTimeString, "%d/%d/%d%d:%d:%d:%d:%d",
        &systime.wDay,
        &systime.wMonth,
        &systime.wYear,
        &systime.wHour,
        &systime.wMinute,
        &systime.wSecond,
        &systime.wMilliseconds);
    return systime;
}

Вся моя проблема в том, что я читаю дату из файла, который хранится в строковой переменной, и мне нужно вычесть текущее время системы из значения, считанного из файла.

И я пытался разобраться в этом, преобразовав строку в системное время, а затем получить разницу, но после опробования этой функции, я продолжаю получать это предупреждение, которое я должен исправить, но не знаю, как именно.

Ответы [ 2 ]

0 голосов
/ 18 марта 2019

Используйте% hu вместо% d.

Объяснение: Поля SYSTEMTIME поля имеют тип WORD , который определяется как

typedef unsigned short WORD;

Тип чтения unsigned short требуется %hu как описано здесь .

0 голосов
/ 18 марта 2019

В Windows WORD определяется как unsigned short, поэтому ему нужно %u вместо %d.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...