C语言:strcpy()

来源:互联网 发布:java interrupt sleep 编辑:程序博客网 时间:2024/05/29 07:07

面试的时候遇到的:自己实现一个 strcpy()函数

先看完善的:

#include<stdio.h>

#include<string.h>

//#include<assert.h>

char *my_strcpy(char *dest,const char *src)

{

int i;
if ( dest == NULL || src == NULL)
        return NULL ;    //或 assert((dest!=NULL)&&(src!=NULL));
    if ( dest == src)
        return dest ;
for( i=0;i<25;i++)//25自取的,只要大于str长度即可
{
*dest=*src;
if(*dest == '\0')
break;
dest++;
src++;

}

return dest;

}

void main()

{

char a[20],b[]="i hope a good result";

my_strcpy(a,b);

printf("%s",a);

printf("\n");

}

写的时候遇到的问题有:

1)如果把strcpy的for() 改为

while( *src!='\0')
{
*dest++=*src++;
}

会遇到

后来会有乱码出现,问题的原因应该是:这个while循环的时候是先判断字符串是否结束,即*src!='\0'是否成立

假如到了末尾,跳出while,问题是并没有将 src 的最后一个字符串结束标志 赋值给 dest ,即dest 并没有结束标识符,所有后面会有乱码


解决的方法:可用上面的for 循环,将src中的所有字符赋值给dest后,判断dest是否为 ‘\0’,如果是,说明复制可以结束

或者用下面的一段代码,网上看到,确实微妙:

 while( (*dest++ = *src++) != '\0');    //这个也是同理,先将所有的 src 赋值给dest 后,再判断是否到了末尾,如果是,停止循环,复制结束


2)还遇到了这样的一段代码:

while(  *dest++  = *src++  != '\0');  

结果是:

一段乱码,什么也不是,问题在于少了括号(请仔细看清楚),搞错了优先级

若为:while(  *dest++  = *src++  != '\0'); 

优先级是: ++ 大于  * 大于  !=  大于 =(赋值)

赋值符号是最低的


欢迎讨论,共同学习---------一个码农的成长历程
0 0
原创粉丝点击