C++中strncmp()与strcmp的区别
这两者的基本区别是:
- STRCMP将两个字符串进行比较,直到出现null字符,而STRNCMP将两个字符串最多比较num个字符。但是,如果 num 等于任一字符串的长度 strncmp 的行为类似于 strcmp .
- 问题 strcmp 函数的作用是:如果传入参数的两个字符串都没有以空字符结束,那么字符比较将继续,直到系统崩溃。但随着 strncmp 函数可以限制与num形参的比较。
当将str1和str2作为参数传递给strcmp()函数时,它将两个字符串逐个字符进行比较,直到null字符(‘ \0 ‘)。在我们的例子中,直到字符’ s ‘,两个字符串都保持相同,但在那之后,str1的字符’ h ‘的ASCII值为104,str2的字符为空字符的ASCII值为0。由于str1字符的ASCII值大于str2字符的ASCII值,因此 strcmp() 函数返回大于零的值。因此,在strcmp()函数中,字符串str1大于字符串str2。当在strncmp()函数中传递这些参数时,要比较字符串的第3个参数num up,然后将两个字符串逐字符进行比较,直到num(如果num <=最小字符串的长度)或最小字符串的null字符。在我们的例子中,两个字符串具有相同的字符 num , so strncmp () 函数返回值为0。因此,在strncmp()函数中,字符串str1等于字符串str2。
// C, C++ program demonstrate difference between
// strncmp() and strcmp()
#include <stdio.h>
#include <string.h>
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
让我们用表格的形式来看看它们的区别:
序号 | strncmp | strcmp |
---|---|---|
1. | 它是一个C库函数。 | 它是C和c++中的库函数 |
2. | 它的语法是-: Strncmp (const char *str1, const char *str2, size_t n) |
它的语法是-: Int STRCMP (const char * str1, const char * str2); |
3. | 它接受两个参数string1和string2 | 这个函数执行字符的二进制比较。 |
4. | 返回值为整型。 | 它执行操作,直到到达NULL。 |