-
strcmp函数与strncmp函数
在前面的文章中我们看到了strcat函数及它更安全的用法strncat。
接下来我们谈谈strcmp函数及其安全的用法strncmp。
strcmp函数的作用是比较字符串,用法如下strcmp(字符串1,字符串2),它会比较这两个字符串,如果字符串相等,
返还0.
考虑下面的代码。
#include<stdio.h>
#include<string.h>
int main()
{
char *ch = "hell word";
char *ch1 = "hello word";
char ch2[40] = "hello word";
int a = strcmp(ch, ch1);//不一样的比较,
int b = strcmp(ch1, ch2);//一样的比较
printf("%d %d", a, b);
getch();
return 0;
}
输出结果是 -1 0;前面告诉大家如果字符串相同返还0;但如果不同呢。
如果:比较单个字符串,比如“A”与“B”,则返还-1;同理,“B’与”A"返还1;返还的值可能不同,只要不是0不就很好。
这个比较与AS||码有关。但如果两个字符串前面几个字母相同,那么strcmp函数会一个一个挨着比较。
对于strncmp函数来讲,比较有了限定strcmp(字符串1,字符串2,限定数字),有了限定数字后,该函数会比较你所限定的
前几个字符。
2.strcpy与strncpy
strcpy函数的作用是拷贝,拷贝出来的字符串叫目标字符串,最初的字符串被称为源字符串。
用法:strcpy(字符串数组,字符串)。
看下面的代码
#include<stdio.h>
#include<string.h>
int main()
{
char ch[100];
char *p = "hell word";
printf("%s", strcpy(ch, p));
getch();
return 0;
}
输出结果:hell word。
从输出结果我们可以看出,该函数返还的是第一个参数的地址。
同理更安全的选择是strncpy,你可以在最后的参数写上一个数字,来确保拷贝的最大字符数,注意\0.
考虑下面的代码
#include<stdio.h>
#include<string.h>
int main()
{
char ch[5];
char *p = "hell word";
strncpy(ch, p, 3);//这样写是对的
ch[4] = '\0';//如果没有的话,ch就不是一个字符数组
printf("%s", ch);
getch();
return 0;
}
运行一下程序,你会发现字符的拷贝不会为你自己添加空字符,考虑一下是否需要添加空字符。