先决条件:strncmp、strcmp
这两者之间的基本区别是:
- strcmp 比较两个字符串,直到出现任一字符串的空字符,而 strncmp 最多比较两个字符串的num 个字符。但是,如果num等于任一字符串的长度,则strncmp 的行为类似于strcmp 。
- 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 基础课程。