我在使用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;
}


如果字符串相等(至少是比较的字符),则应打印消息。如果没有,什么也不做;所以我仍然不明白为什么第一个条件成立。

有任何想法吗?

最佳答案

如果字符串相等,则strcmpstrncmp函数将返回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");


产生YESNOYES

关于c - strncmp无法正常工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22658152/

10-13 08:29