C--字符串函数Strcpy,Strcat,Strcmp

目录

一.Strcpy

1.功能:把一个字符串中的内容拷贝到另一个字符串中。如以下示例:

2.用法:

3.模拟实现:

4.Strncpy代替Strcpy:Strncpy和Strcpy功能相同,但是其参数多了一个num,表示复制arr中几个字符的长度。

一些知识点

1.*desnation和desnation区别

2.const:恒定的,不变的。

a.功能:关键字在C语言中修饰指向的内容不发生改变。

b.const修饰指针

3.assert:断言。

a.头文件assert.h。

二,Strcat

1.功能:在一个字符串后面追加字符。

2.用法:

a.头文件:string.h

b.strcat(brr,arr),把arr中的内容追加到brr中。

3.模拟实现

4.strncat:功能类似,模拟实现

三.Strcmp

1.功能:比较两个字符串大小,字符串比较大小比的是字符的ASCII编码的大小。

2.用法:

a.头文件:string.h

b.int ret=strcmp(brr,arr),strcmp返回类型是整数,>0  <0  =0,这三种可能。

3.模拟实现:

4.strncmp:比较字符数组中前多少个字符


一.Strcpy

1.功能:把一个字符串中的内容拷贝到另一个字符串中。如以下示例:

#include <string.h>
int main()
{
	char arr[] = { "You will success" };
	char brr[30] = { 0 };
	printf("%s", strcpy(brr, arr));
	return 0;
}

2.用法:

a.头文件string.h

b.strcpy(str1,str2),str2是被复制的字符数组数组名,str1是复制str1字符数组的数组名。

3.模拟实现:

a.返回类型是字符指针,参数也是字符指针,destination(目的地),source(来源,源头)。

#include <string.h>
#include <assert.h>

char* my_strcpy(char* desnation, const char* source)
{
	assert(*source);
//标记desnation的起始位置
	char* mark = desnation;
	while (*source != '\0')
	{
		*desnation = *source;
		desnation++;
		source++;
//也可以直接写成,*desnation++=*source++
	}
	return mark;

}
int main()
{
	char arr[] = { "You will success" };
	char brr[30] = { 0 };
	printf("%s", my_strcpy(brr, arr));
	return 0;
}

但是如果字符数组里面的内容过多,而brr只能存放30个字符,则会导致程序崩溃,因此是不安全的。

所以我们可以选择Strncpy代替Strcpy

4.Strncpy代替Strcpy:Strncpy和Strcpy功能相同,但是其参数多了一个num,表示复制arr中几个字符的长度。

模拟实现:

#include <string.h>
#include <assert.h>

//size_t 无符号类型
char* my_strncpy( char* desnation, const char* source,size_t size)
{
    assert(*source);
    //assert(*desnation);
    char* mark = desnation;
    while (size)
    {
        *desnation++ = *source++;
        size--;
        //desnation++;
        //source++;
    }
    return mark;

}
int main()
{
    char arr[] = { "You will success" };
    char brr[30] = { 0 };
    int size = 0;
    size = 3;
    printf("%s", my_strncpy(brr, arr,size));
    return 0;
}


一些知识点

1.*desnation和desnation区别

* + 指针变量名

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值