strcmp
函数声明:
int strcmp(const char *arr1,const char *arr2)
使用示例:将用户的响应与已经储存的字符串作比较。
头文件:#include <string.h>
注意:比较的是字符串,而不是数组,字符或者地址。
如果两个函数的参数相同,则返回0,否则返回非零值:
如果第一个字符串在ASCII码表中的顺序位于第二个之前,则函数返回负值,否则函数返回正值。
即
如果str1==str2,返回0;
如果str1<str2,返回负值;
如果str1>str2,返回正值;
注意:
在ASCII码表中,
空字符位于第一
大写字母在小写字母之前
\0的ASCII码值是0
使用示例:
//编写代码实现,模拟用户登录情景,并且只能登录三次。(只允许输入三次密码,如果密码正确则
//提示登录成,如果三次均输入错误,则退出程序。
int main()
{
char password[20] = { 0 };
int flag = 0;
int n = 1;
for (n = 1; n <= 3; n++)
{
printf("请输入密码:\n");
scanf("%s", &password);
if(strcmp(password, "123456") == 0)
{
flag = 1;
printf("输入正确\n");
break;
}
else
{
printf("输入错误,还有%d次机会\n", 3-n);
}
}
if (flag == 0)
{
Sleep(1000);
system("cls");
printf("\n三次机会已经用完,输入错误,退出程序\n");
}
return 0;
}
strcpy
函数声明:
char *strcpy(char *arr1,const char *arr2)
描述:将arr2所指向的字符串赋值给arr1。<注意如果arr1需要足够大去容纳arr2>
函数的返回值为一个指向arr1的指针。
使用示例:
int main()
{
char str[50];
char arr[20];
memset(str, '\0', sizeof(arr));
strcpy(arr, "hello,world!");
strcpy(str, arr);
printf("最终的字符串为:%s\n", str);
return 0;
}
运行结果:
最终的字符串为:hello,world!
strcpy()第二个参数指向的字符串被拷贝到第一个参数指向的数组中,拷贝出来的成为目标字符串,最初的字符串被成为源字符串。strcpy接收两个字符串指针作为参数,可以把指向源字符串的第二个指针声明为指针,数组名或者字符串常量,但指向源字符串副本的第一个指针必须指向一个数据对象,并且该对象有足够的空间存储源字符串的副本。
***声明数组将分配一个存储数据的空间,而声明指针只能分配一个存储地址的空间。
strcpy把源字符串的空字符也拷贝在内。
strcpy的其他属性:
<未完待续>
strncpy
strncpy是逐字符串,memset是逐个字节。
函数声明:
char strncpy(char *arr1,const char *arr2,size_t n)
对比memset的声明:
void* memset(void*s,int c,size_t n)
对于strncpy来说
如果arr1<arr2,后面多余的就用NULL字节('\0')来填充,如果arr1>arr2,则拷贝的字符串不会超过arr2。
使用示例:
int main()
{
char str[50];
char arr[60];
memset(str, '\0', sizeof(str));
strcpy(str, "you are better than you believe");
strncpy(arr,str,sizeof(arr));
puts(arr);
return 0;
}
运行结果:
you are better than you believe
<关于strncpy与终止字符\0:未完待续>