字符串函数和内存函数

1.strcpy函数

作用:把一段字符串拷贝到另外一个字符串中。

用法如下:

#include<stdio.h>
int main()
{
    char ch[]="abcdef";//初始化字符串
    char ch1[20]="ab";//初始化字符串
    strcpy(ch1,ch);//strcpy函数的应用

    printf("%s",ch1);
}

在strcpy函数中,里面的两个操作数ch1,ch,都是指针变量,因为,数组名就是数组首元素地址。

有两个特殊情况:1.在sizeof(arr)中,这里的数组名是整个数组的地址。2.“&arr”这里数组名也是整个数组的地址)

也就是说,如果你想要使用这个函数,里面的参数都需要是指针变量。

上述代码中,第一个ch1是目标拷贝函数,第二个ch就是拷贝函数的来源。上述代码就是把ch的字符串拷贝到ch1中,这个函数的返回值也是指针类型。返回拷贝后首元素的地址,打印出来就ok了。打印字符串时,只需要首元素地址,它就会从首元素开始打印,直到‘\0’,把字符串完整打印出来。

效果如下:

2.strcat函数(头文件:#include<string.h>)

作用:把一个字符串放到另外一个字符串的后面。

用法如下:

#include<stdio.h>
int main()
{
   char ch[20]="abcdef";
   char ch1[]="ghijklmn";
   strcat(ch,ch1);
   printf("%s",ch);
   return 0;
}

该函数的用法和strcpy极近相似,不不不,应该说是一毛一样。

效果如下:

3.strcmp函数(头文件:#include<string.h>)

作用:用来比较两个字符串的大小(注意:说白了就是轮流比较每个字符的ASCLL值,可不是比较字符串的字符个数大小啊)

用法如下:

#include<stdio.h>
#include<string.h>
int main()
{
	/*char ch[] = "abcdef";
	char ch1[20] = "a";
	strcpy(ch1,ch);*/
	char ch[20] = "abcdzf";
	char ch1[] =  "abcdzf";
	int ret=strcmp(ch,ch1);
	if (ret > 0)
		printf("ch大");
	else  if (ret == 0)
		printf("一样大");
	else
		printf("ch1大");


	//printf("%s",ch1);
	return 0;
}

比较原理:

需要注意的是:函数里面的两个比较的参数都是指针类型,返回值是int类型。

效果如下:

注意:上述三种函数都是字符串长度不受限制的函数,再说具体点就是:比如strcpy直接把整个字符串全都拷贝过去不能自己调整拷贝的长度,,再比如strcat直接把整个字符串放在目标字符串后面,不能自己设置长度。接下来介绍的三个函数则是可以自己调整长度。

4.strncpy函数是strcpy的升级版,可以调整拷贝的字符个数。

用法和strcpy一毛一样,示范效果如下:

ch1是目标拷贝函数,ch是函数拷贝的来源,,3是拷贝的个数。在这里就是把ch的值拷贝到ch1中,拷贝三个元素。注意,这里是元素,不是字节。里面的两个操作数也是是指针变量,返回值也是指针变量。

5.strncat函数,这个函数是strcat的升级版,可以调整从一个字符串放置到另外一个字符串后面的字符个数,用法也一毛一样。

示例效果如下:

注意,这里的“20”和“3”也是元素个数,不是字节。

里面的两个操作数也是是指针变量,返回值也是指针变量

6.strncmp也是strcmp的升级版,可以调整比较元素的个数

示例效果如下:

(在这里只比较了前四个元素,ch1第四个元素“l”的ASCLL值比ch的第四个元素“d”大,所以这里ch1大)

(在这里只比较三个元素,而这两个的前三个字符串是一样的,所以在这里两个字符串大小相等)

7.memcpy函数。针对内存块进行拷贝,单位是字节

用法如下:

和strncpy用法一样,只是调整拷贝数量的单位是字节了,以下是它的参数类型和返回类型。对了,提醒一点,void*类型的指针不可以直接解指针,需要进行强制类型转换后才可以解指针。

效果如下:由于一个整形四个字节,所以如果想要我这里是往里面打印了8个字节,也就是拷贝了2个元素。

这里是拷贝字符串,一个字符类型占一个字节,所以这里是把字符串全传过去了,但注意,拷贝的目的地需要多出一个字节来保存“\0”,但是mempy里面的拷贝字节数量则不需要考虑\0,只要目的地里的空间需要考虑上\0的空间。

但是mcmpy函数有一个缺陷,就是不可以拷贝有内存相同的地方。

8.memmove函数和memcpy函数的区别就是,这个函数处理的原内存块和目标内存块是可以重叠的。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值