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');
优先级是: ++ 大于 * 大于 != 大于 =(赋值)
- c语言strcpy()用法
- c语言,strcpy
- c语言strcpy实现
- C语言实现strcpy
- C语言strcpy函数
- C语言:strcpy()
- C语言实现strcpy
- 【C语言】 实现strcpy
- c语言实现strcpy
- C语言strcpy()函数
- strcpy ( )【C语言库函数源代码】
- strcpy ( )【C语言库函数源代码】
- C语言实现strcpy函数
- C语言 strcat与strcpy
- C语言实现strcpy函数
- C语言strcpy函数实现
- C语言标准库函数strcpy
- C语言之strcpy函数
- 零碎笔记(二)
- bash: /opt/Tools/linux-devkit/bin/arm-arago-linux-gnueabi-gcc: No such file or directory
- Python中请使用isinstance()判断变量类型
- 2个无线路由器怎么连接
- Python中配置matplotlib模块
- C语言:strcpy()
- codingbat:recursion-2:1(JAVA)
- 动态内存分配
- NSURLConnection — GET请求的第二种方式
- 深入源码解析Python中的对象与类型
- Linux系列-安装常用软件
- 字节对齐--编码就得多思考
- vim 7.4同时支持python 2.x和3.x问题调研
- 数位思想