2015-12-23 2 views
0

Я использую следующий метод для сравнения двух версий одного и того же файла.strcmp неправильное использование?

fprintf(stdout, "ref_ptr %s\n", str); 
fprintf(stdout, "cur_ptr %s\n", cur); 

if (strcmp(cur, str) < 0) 
{ 
    fprintf(stderr,"Error: bad version!\n"); 
    return -1; 
} 

Выход:

ref_ptr 
01.100 
01.020.21 
cur_ptr 
01.100 
01.000.46 
Error: bad version! 

В данном конкретном случае дворняжка не больше ул, почему?

Он отлично работает, когда

ref_ptr 
01.100 
01.000.42 

Однако в первом случае я хотел бы рассмотреть 46> 21

+0

Что такое 'str' и' cur'? (Извините, но я не знаком с '% r'. И, кстати, почему вы используете древний'% r' вместо стандартного 'vfprintf'?) –

+1

, но' 000' меньше, чем '020 'не так ли? и [strcmp] (http://www.cplusplus.com/reference/cstring/strcmp/) перестает сравнивать при первом несоответствии – UnholySheep

+0

@ AndreaCorbellini извините. Это была моя ошибка, когда я написал вопрос. Это% s – ogs

ответ

4

strcmp находят первое несоответствие между строками (если она существует) и сообщает, какая строка имеет больше значение в точке несоответствия.

В вашем случае первое несоответствие здесь

01.020.21 <- str 
01.000.46 <- cur 
    ^

Ясно 2>0 что означает cur появляется перед str в лексикографическом порядке, поэтому вызов функции strcmp(cur, str) должен возвращать отрицательное число.

int strcmp(const char *lhs, const char *rhs);

Возвращаемое значение

Отрицательное значение, если LHS появляется перед РИТ в лексикографическом порядке. Zero if lhs и rhs сравнивают равные. Положительное значение, если lhs появляется после rhs в лексикографическом порядке.

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