2015-05-16 3 views
0

У меня есть это:Странное возвращение ошибка с 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

Какой компилятор вы используете? Для меня он возвращает два (VC++ 2013) – szczurcio

+5

Работает для меня: http://ideone.com/bK9HKd – interjay

+3

Есть что-то, о чем вы не говорите. –

ответ

1

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

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

Так что «ответ» - это несовместимая версия sscanf под CVI.

Если кто-то хочет опубликовать ответ, я соглашусь и отчитаю его.

+0

Вы должны обновить свой вопрос, включив в него [MCVE] (http://stackoverflow.com/help/mcve). В противном случае существует вероятность, что у вас есть ошибка где-то в коде, который вы использовали в CVI. –

+0

Это MCVE с CVI. – Jiminion

Смежные вопросы