字符串函数详解

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:未完待续>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值