📜  C/C++ 中 strncmp() 和 strcmp 的区别

📅  最后修改于: 2021-09-14 02:45:45             🧑  作者: Mango

先决条件:strncmp、strcmp

这两者之间的基本区别是:

  1. strcmp 比较两个字符串,直到出现任一字符串的空字符,而 strncmp 最多比较两个字符串的num 个字符。但是,如果num等于任一字符串的长度,则strncmp 的行为类似于strcmp
  2. strcmp函数的问题在于,如果参数中传递的两个字符串都没有以空字符终止,则字符比较将继续直到系统崩溃。但是使用strncmp函数,我们可以限制与num参数的比较。

当通str1和STR2作为参数对strcmp()函数,它两个字符串逐个,直到空字符(“\ 0”)进行比较。在我们的例子中,直到字符‘s’两个字符串保持不变,但之后str1 的字符‘h’ 的ASCII 值为 104,而str2 的空字符的ASCII 值为 0。由于 str1字符的 ASCII 值大于 ASCII 值str2字符,因此strcmp()函数返回大于零的值。因此,在 strcmp()函数,字符串str1 大于字符串str2。
当通过在STRNCMP这些参数()与所述第三参数NUM高达其要比较字符串函数则两个字符串逐个NUM直到比较(如果num <=最小字符串的长度)或直到最小字符串的空字符。在我们的例子中,两个字符串在num 之前都有相同的字符,所以strncmp()函数返回值零。因此,字符串str1 等于 strncmp()函数的字符串str2。

// C, C++ program demonstrate difference between
// strncmp() and strcmp()
#include 
#include 
  
int main()
{
    // Take any two strings
    char str1[] = "akash";
    char str2[] = "akas";
  
    // Compare strings using strncmp()
    int result1 = strncmp(str1, str2, 4);
  
    // Compare strings using strcmp()
    int result2 = strcmp(str1, str2);
  
    // num is the 3rd parameter of strncmp() function 
    if (result1 == 0)         
        printf("str1 is equal to str2 upto num characters\n");    
    else if (result1 > 0)
        printf("str1 is greater than str2\n");
    else
        printf("str2 is greater than str1\n");
  
    printf("Value returned by strncmp() is: %d\n", result1);
  
    if (result2 == 0) 
        printf("str1 is equal to str2\n");    
    else if (result2 > 0)
        printf("str1 is greater than str2\n");
    else
        printf("str2 is greater than str1\n");
  
    printf("Value returned by strcmp() is: %d", result2);
  
    return 0;
}

输出:

str1 is equal to str2 upto num characters
Value returned by strncmp() is: 0
str1 is greater than str2
Value returned by strcmp() is: 104
想要从精选的视频和练习题中学习,请查看C 基础到高级C 基础课程