C语言:模拟实现strcpy
2015-11-18 23:39
316 查看
模拟实现strcpy:
(1)字符串拷贝函数就是将原串拷贝到新串,而原串无需变换,可以用const来修饰。包括‘\0’全部拷贝到新的子串dest。
(2)while ((*dest++ = *src++) )
{
;
}
这种遍历程序连同‘\0’一起拷贝了while ((*dest++ = *src++) )相当于while ((*dest++ = *src++) !=‘\0’),上一次拷贝到最后一个字符时后置加加,将src变为‘\0’了,而下次再进入while循环时先执行*dest++ = *src++,dest也拷贝为‘\0’.而此时不满足该条件跳出while循环。但是此时已经拷贝了'\0'了。这也是程序的先后性。
或者可以:while (*src)
{
*dest = *src;
dest++;
src++;
}
原串为‘\0’时跳出,并未拷贝‘\0’,要赋值*dest = '\0',需要赋值 *dest = '\0'。
其实对于以上两种方法均可都执行*dest = '\0'操作,即使赋值过再赋值也无妨。
(3)另外要说的一点是:自加有副作用,因此return dest 可能读到最后'\0'就不输出了。因此需要定义新变量来保存首地址
char *ret = dest以便返回。
代码如下:
(1)字符串拷贝函数就是将原串拷贝到新串,而原串无需变换,可以用const来修饰。包括‘\0’全部拷贝到新的子串dest。
(2)while ((*dest++ = *src++) )
{
;
}
这种遍历程序连同‘\0’一起拷贝了while ((*dest++ = *src++) )相当于while ((*dest++ = *src++) !=‘\0’),上一次拷贝到最后一个字符时后置加加,将src变为‘\0’了,而下次再进入while循环时先执行*dest++ = *src++,dest也拷贝为‘\0’.而此时不满足该条件跳出while循环。但是此时已经拷贝了'\0'了。这也是程序的先后性。
或者可以:while (*src)
{
*dest = *src;
dest++;
src++;
}
原串为‘\0’时跳出,并未拷贝‘\0’,要赋值*dest = '\0',需要赋值 *dest = '\0'。
其实对于以上两种方法均可都执行*dest = '\0'操作,即使赋值过再赋值也无妨。
(3)另外要说的一点是:自加有副作用,因此return dest 可能读到最后'\0'就不输出了。因此需要定义新变量来保存首地址
char *ret = dest以便返回。
代码如下:
#include<stdio.h> #include<stdlib.h> #include<assert.h> char* my_strcpy(char* dest, const char* src) //const使在函数中不能修改*src原先的值 { assert(dest); //两次断言-->检验参数,增加代码健壮性 assert(src); char* strdest = dest; //保存原始指针地址 while (*src) { *dest++ = *src++; } *dest = '\0'; return strdest; } int main() { char arr1[] = "hello world!"; char arr2[20] ; char* ret = my_strcpy(arr2, arr1); printf("%s", ret); system("pause"); return 0; }
相关文章推荐
- 一个关于if else容易迷惑的问题
- 如何组织构建多文件 C 语言程序(二)
- 如何写好 C main 函数
- Lua和C语言的交互详解
- 一道sql面试题附答案
- C# 超高面试题收集整理
- 关于C语言中参数的传值问题
- 简要对比C语言中三个用于退出进程的函数
- 深入C++中API的问题详解
- 基于C语言string函数的详解
- C语言中fchdir()函数和rewinddir()函数的使用详解
- C语言内存对齐实例详解
- 使用C语言判断英文字符大小写的方法
- c语言实现的带通配符匹配算法
- C语言实现顺序表基本操作汇总
- C语言中计算正弦的相关函数总结
- 使用C语言详解霍夫曼树数据结构
- 探讨C语言的那些小秘密之断言
- C语言实现BMP转换JPG的方法
- 深入探讨C语言中局部变量与全局变量在内存中的存放位置