我在使用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;
}
如果字符串相等(至少是比较的字符),则应打印消息。如果没有,什么也不做;所以我仍然不明白为什么第一个条件成立。
有任何想法吗?
最佳答案
如果字符串相等,则strcmp
和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
。关于c - strncmp无法正常工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22658152/