我正在使用以下方法来比较同一文件的两个版本。
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 )
应该返回负数。
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.
关于linux - strcmp 用法错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34437923/