C语言:strcpy()
2016-01-01 14:12
489 查看
面试的时候遇到的:自己实现一个 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');
优先级是: ++ 大于 * 大于 != 大于 =(赋值)
赋值符号是最低的
欢迎讨论,共同学习---------一个码农的成长历程
先看完善的:
#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语言及程序设计》第25讲阅读程序
- 关于c++常犯的错误
- 斜堆--C语言实现
- C++入门(7):对象
- cmake 生成Makefile时指定c/c++编译器
- C语言3——结构体、联合体、枚举、宏定义
- C语言-函数指针与函数名的区别
- C语言2——指针
- 左式堆--C语言实现
- C++ 继承体系中的名称覆盖
- 值得推荐的C/C++框架和库
- C语言数组
- c++ 特性回顾
- Sicily 2683. Alice and Bob
- 【C++】基础知识—构造函数与拷贝构造函数
- C++学习 - 泛型编程基础
- C语言指针从理解到深入(2)
- 利用C++11实现一个自动注册的工厂
- C++重载运算符
- 《The C++ Programming Language》摘抄与总结——类型与声明