strcmp 用法错误?

strcmp wrong usage?

我正在使用以下方法来比较同一文件的两个版本。

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!

在此特定情况下,cur 不大于 str,为什么?

时工作正常
ref_ptr
01.100
01.000.42

但是,在第一种情况下,我会考虑 46 > 21

strcmp 找到字符串之间的第一个不匹配项(如果存在)并报告哪个字符串在不匹配点具有更大的值。

在你的情况下,第一个不匹配出现在这里

01.020.21 <- str
01.000.46 <- cur
    ^

很明显 2>0 这意味着 cur 在字典顺序中出现在 str 之前所以函数调用 strcmp(cur, str) 应该 return 负数。

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

Return value

Negative value if lhs appears before rhs in lexicographical order. Zero if lhs and rhs compare equal. Positive value if lhs appears after rhs in lexicographical order.