strncmp ( const char * str1, const char * str2, size_t n );
【参数】str1, str2 为需要比较的两个字符串,n为要比较的字符的数目。
字符串大小的比较是以ASCII 码表上的顺序来决定,此顺序亦为字符的值。strncmp()首先将s1 第一个字符值减去s2 第一个字符值,若差值为0 则再继续比较下个字符,直到字符结束标志'\0',若差值不为0,则将差值返回。例如字符串"Ac"和"ba"比较则会返回字符"A"(65)和'b'(98)的差值(-33)。注意:要比较的字符包括字符串结束标志'\0',而且一旦遇到'\0'就结束比较,无论n是多少,不再继续比较后边的字符。
【返回值】int ,若str1与str2的前n个字符相同,则返回0;若s1大于s2,则返回大于0的值;若s1 小于s2,则返回小于0的值。
上面是百度知道描述内容非常详细,下面举个列子。
if (!strncmp("band names", line, 10))
{
//相等,‘band names’加上空格共10个字符,与line串判断前10个字符。
//特点大小写敏感
}
if (strncmp("band names", line, 10)==0)
{
//同上,相等。
//特点大小写敏感
}
笨方法:
if (line[0]='b'&&line[1]='a'&&line[2]='n'&&line[3]='d'&&line[4]=' ')
{
//相等,‘band ’加上空格共5个字符,与line串判断前5个字符。
//特点大小写敏感
}
同上:
char*line = "Band Names";
char linearray = *line;
char linearray1 = *("Band Names");
if (linearray1 == linearray)//同为char,自对比指针指向的一个字节
{
printf("相等");//或者if (line[0] == linearray1 )
//特点大小写敏感
}
扩展:
//我们需要char*类型,但语法不支持
char* test1 = "Band Names", test2 = '1';
typedef char* Chars;//需要重定义类型
Chars test3 = "Band Names", test4 = "Band Names";
Chars test5 ,test6;
printf("test1:%p\n", test1);
printf("test1:%p\n", test2);
printf("test1:%p\n", test3);
printf("test1:%p\n", test4);
test5 = test1;
test6 = test1;
printf("test1:%p\n", test5);
printf("test1:%p\n", test6);
if (test5 == test3)//地址
{
printf("相等");
}
进阶:
/** Alias for strcasecmp() == 0 不分大小写*/
#define Equal(a,b) (_stricmp((a),(b))==0)
/** Alias for strcasecmp() == 0 */
#define EQUAL(a,b) (strcmp((a),(b))==0)
/** Alias for strincmp() == 0 不分大小写*/
#define Equaln(a,b,c) (_strnicmp((a),(b),(c))==0)
/** Alias for strncmp() == 0 */
#define EQUALN(a,b,c) (strncmp((a),(b),(c))==0)