strcmp用法错误?

时间:2015-12-23 14:34:30

标签: 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&gt; 21

1 个答案:

答案 0 :(得分:4)

01.020.21 <- str 01.000.46 <- cur ^ 发现字符串之间的第一个不匹配(如果存在)并报告哪个字符串在不匹配时具有更大的值。

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

2>0

显然cur表示str在词典顺序中出现strcmp(cur, str),因此函数调用int strcmp( const char *lhs, const char *rhs );应返回负数。

  

.v-grid-cell { font-size: 13px; height: 18px; vertical-align: middle; } .v-grid-row{ height: 18px; } .v-grid-row-odd { height: 18px; background-color: #EFF0F1; }

     

返回值

     

如果lhs以字典顺序出现在rhs之前,则为负值。   如果lhs和rhs相等则为零。   如果按字典顺序在rhs之后出现lhs,则为正值。