我在使用strncmp
时遇到问题。在我读到的时候,如果两个字符串的字符相等,理论上strncmp
应该返回0;但是,当我进行比较时,代码行为异常并产生误报(不等于字符,仍然是if子句)。代码如下:
#include <stdio.h>
#include <string.h>
int main(){
char *frase1="some string";
char *frase2="another string";
char *frase3="some other string";
//Comparar frases desde inicio
if(strncmp(frase1, frase2, 200))printf("1<->2, 200 characters\n");
if(strncmp(frase1, frase3, 20))printf("1<->3, 20 characters\n");
if(strncmp(frase1, frase3, 4))printf("1<->3, 4 characteres\n");
return 0;
}
如果字符串相等(至少是比较的字符),它们应该打印消息;如果没有,什么都不做;所以我仍然不明白为什么第一个条件成为现实。
有什么想法吗?
答案 0 :(得分:1)
strcmp
&amp;如果字符串相等,strncmp
函数将返回0
。你应该这样做:
if (strncmp(frase1, frase3, 4) == 0) ...
即:
char *str1 = "Example 1";
char *str2 = "Example 2";
char *str3 = "Some string";
char *str4 = "Example 1";
if (strncmp(str1, str2, 7) == 0) printf("YES\n"); // "Example" <-> "Example"
else printf("NO\n");
if (strncmp(str1, str3, 2) == 0) printf("YES\n"); // "Ex" <-> "So"
else printf("NO\n");
if (strcmp(str1, str4) == 0) printf("YES\n"); // "Example 1" <-> "Example 2"
else printf("NO\n");
产生YES
,NO
,YES
。
答案 1 :(得分:0)
如果字符串相等(至少是比较字符),则应打印消息
不,如果字符串相等,则不应打印消息,因为strncmp
在相等时返回0
。由于上一次检查返回0
,它不会被打印而另外两个非零,即不相等,因此您会看到它们被打印出来。
strncmp
的文档可以让您更清晰。它返回
答案 2 :(得分:0)
如果字符串相等,strncmp()函数返回零,否则返回非零值。因此,如果比较两个不相似的字符串,则得到一个非零值,就if语句而言,非零值为TRUE。所以你需要做的是:
if(!strncmp(frase1, frase2, 200))printf("Mismo insulto no creo\n");
答案 3 :(得分:0)
你应该将strncmp() == 0
作为要评估的表达式
工作代码:
#include <stdio.h>
#include <string.h>
int main(){
char *frase1="some string";
char *frase2="another string";
char *frase3="some other string";
//Comparar frases desde inicio
if(strncmp(frase1, frase2, 200) == 0)
printf("1<->2, 200 characters\n");
if(strncmp(frase1, frase3, 20) == 0)
printf("1<->3, 20 characters\n");
if(strncmp(frase1, frase3, 4) == 0)
printf("1<->3, 4 characteres\n");
return 0;
}
答案 4 :(得分:0)
一,在发布示例代码时,将字符串和标识符保留为英语是一种良好的做法。可读性胜过乐趣。
如果条件为if
,则会执行两个true
块。值0
被视为false
,而其他的值<{1}}被视为0
。
即,你的问题不是true
,而是关于真与假的混淆。