linux - strcmp 用法错误?

标签 linux string 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!

在这种特定情况下,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/

相关文章:

string - 如何检查 Fortran 中字符是大写还是小写?

c - 这个程序中的strcmp有什么问题?

c - strncpy和代码的效率

linux - 为什么两种汇编 shellcode 的工作方式不同?

linux - 如何将行添加到 sed 输出的开头

c - 在 CentOS 5.4 中编译 netfilter_queue 遇到困难(GCC 错误)

c# - 来自 ifstream 的文本开始时带有 "\0\0\0

c++ - 如何将字符串从 C++ DLL 返回到 MetaTrader 4 代码执行生态系统?

c - 段错误处理 strcmp

mysql - 线程化 shell 脚本