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函数的区别就是,这个函数处理的原内存块和目标内存块是可以重叠的。