Странная ошибка возврата с sscanf

У меня есть это:

#include<stdio.h>
#include<string.h>
int main(void)
{
    int ret;
    int major =0, minor= 0, build =0, revision =0;
    char entry[16];
    strcpy(entry,"1.2");
    ret = sscanf(entry,"%d.%d.%d.%d", &major, &minor, &build, &revision);
    printf("sscanf(""%s"") returned %d\r\n", entry, ret);
    printf("major=%d, minor=%d, build=%d, revision=%d\r\n",
        major, minor, build, revision);
    return ret;
}

После sscanf называется, ret равен -1, но первые две записи заполнены (основной - 1, второстепенный - 2). я ожидал ret быть 2. Я не знаю, что не так.

1 ответ

ОК, думаю, я понял проблему. Поведение в порядке (работает) в VS 2013. Но версия CVI (National Instruments) просто не играет по правилам.

sscanf () в CVI возвращает -1, когда происходит только частичное совпадение, но оно производит частичное совпадение. Он также ничего не делает с errno, который, очевидно, функциям scanf разрешено игнорировать.

Таким образом, 'answer' - это несовместимая версия sscanf для CVI.

Если кто-то захочет опубликовать ответ, я его приму и сообщу.

Другие вопросы по тегам