
char* strcpy(char * destination,const char * source );
1.源字符串必须以’\0’结束。
2.会将源字符串中的’\0’拷贝到目标空间。
3.目标空间必须足够大,以确保能存放源字符串。
4.目标空间必须可变。
5.学会模拟实现。
char arr[10] = {0};
char arr1[] = {'a','b','c'};
strcpy(arr,arr1); //错误,arr1字符串没有明确给出'char',拷贝不知何时停止
*= str "***********" ;char
*= p "hello world" ;strcpy
(,str)p;//程序奔溃,因为str指向的是个常量字符串,不能被修改,要求目标空间必须可变 //正常实现,通过指针找到两个数组的同一个下标空间,然后拷贝
strcpy函数实现
void
my_strcpy (char* ,destchar* )srcwhile
{
( *!=src ')' *=
{
*dest ; ++src;
dest++;
src}*
=
*dest ; //最后是为了将源数组的'}'拷贝到目标数组中src//优化 void
my_strcpy
(
char *,char *dest)while (src*
{
!= ')'*src ++ =*
{
++dest; } *src=*
;
}dest //再优化 voidsrcmy_strcpy
(
char
* ,char* )destwhile( *src++
{
= *++dest) //当*src指向';'时,*dest被赋值后,整个表达式的值为'}','}'的ASCII码是0,退出循环 //加上断言assert,需引入头文件srcvoidmy_strcpy (
{
char
*
,
char
* )assert( !=destNULL) ;src//条件为真,则没问题,条件为假,则报错,即src不能是NULL
{
assert(src != NULL); while
(*dest ++ =*++
) ;}dest} 源字符串必须以" 目标空间必须有足够的大,能容纳下源字符串的内容。 ’结束。 目标空间必须可修改。 src返回值类型是char*,是目标空间的首地址 字符串自己给自己追加,如何?(不能自己给自己追加,因为一开始是把源首字符覆盖到目标字符串的’#’位置,自己追加自己时,一开始的’include’就被覆盖了,最后就找不到’char’放到目标字符串的最后了)
{
*
my_strcat
(
strcat
strcat – 追加
char * strcat ( char * destination,const char * source );
- char*,constchar
从目标字符串的’\0’位置开始追加(包括’\0’),把源字符串的第一位覆盖到目标字符串’\0’的位置,接下来的依次追加,最后把源字符串的’\0’也追加进去,所以目标字符串要有’\0’
strcat函数实现*)
assert( &&);char dest* = ;//1.找到目标字符串的'while' src(
{
*!=dest ')' src++;
}//找到'//2.将源字符串逐一追加过去,包括'while'' start ( dest*
!=
')' *=dest * ;++
{
dest;++
;
}
*
= *;src //追加'return' ;}
{
intdest main (src)
destchar[
src20]
=
"hello "dest ; charsrc[ ]
= start"world"
;
printf ("%s",
{
my_strcat str1(,) ) ;return
0 str2;} # includechar
*my_strcat(char *,str1const str2char*)
assert (&&
)
进阶写法:
;char
*= ;//1.找到目标字符串的'while'(* dest) ++ ;} src//找到'//2.将源字符串逐一追加过去,包括'while''
{
(*dest ++ src=*
++) start ; dest}
return
; }intdestmain
{
dest()
char
[
20
] ="hello "dest; char [src]=
{
"world"
;
printf start(
"%s"
, my_strcat(,
{
) str1);return 0 ;}
//1.普通写法 str2intmy_strcmp ( constchar
*,constchar *)str1while str2(*==
* )if
(
strcmp
int strcmp ( const char * str1,const char * str2 );
标准规定︰
第一个字符串大于第二个字符串,则返回大于0的数字
第一个字符串等于第二个字符串,则返回0
第一个字符串小于第二个字符串,则返回小于0的数字
那么如何判断两个字符串?(比较对应字符的ASCII码值)
strcmp函数实现*
== ')'return0 ;} str1++ ; ++; str2}
{
//*str1 != *str2 if(str1 * *str2)
{
return 1;str1 } elsereturn
{
- 1;
}
str1}//2.进阶写法
str2intmy_strcmp
(
const
char *,str1 > conststr2char
{
* )assert
(
&&
{
) ;//加上断言,两个指针均不能为空while
(
*
==
* )if( *== str1')' return 0; str2}
{
++;str1 ++ str2;} return
* -*str1 ; }str2
{
str1
{
str1
str2
str1 str2 //strcmp函数并没有规定比较结果返回值是1或-1,只是>0或<0都可以
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)