C语言:模拟实现strcpy
2016-05-30 17:15
183 查看
模拟实现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以便返回。
代码如下:
本文出自 “Han Jing's Blog” 博客,请务必保留此出处http://10740184.blog.51cto.com/10730184/1714516
(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; }
本文出自 “Han Jing's Blog” 博客,请务必保留此出处http://10740184.blog.51cto.com/10730184/1714516
相关文章推荐
- 【笔试题】C语言:模拟实现strncmp
- 【笔试题】C语言:模拟实现strncat
- 【面试题】C语言:模拟实现strncpy,尝试比较strncpy与strcpy区别。
- 【面试题】C语言:模拟实现内存放置函数memset()
- 【面试题】C语言:模拟实现memcmp,试比较memcmp与strcmp,strncmp的区别
- 【指针篇】C语言:指针与数组的区别,数组指针与指针数组的剖析。
- C语言:实现一个函数itoa(int n,char s[]),将整数n这个数字转换为对应的字符串,保存到s中
- C语言:字符数组的内容为;tneduts a ma i;,内容改为i am a student.只能开辟有限个空间
- 【面试常考】C语言:输入:&quot;student a am i&quot;,输出&quot;i am a student,不能使用库函数
- C语言:在字符串中找出第一个只出现一次的字符。如输入“abaccdeff”,则输出&#39;b&#39;
- 【笔试题】C语言:在字符串中找出第一个只出现一次的字符。如输入“abaccdeff”,则输出&#39;b&#39;。
- C语言:每瓶汽水1元,两个空瓶可以置换一瓶汽水,现在有20元,最多能喝多少瓶汽水。
- C语言:实现一个函数,可以左旋字符串中的k个字符。
- C语言:判断一个字符串是否为另外一个字符串旋转之后的字符串。(左旋右旋、求子串)
- C语言:【面试题】在二维数组中,每行每列都按照递增的顺序排序,判断数组中是否包含一个数。
- C语言:自己动手查看float以及double类型的变量2.5在内存中的存储方式。
- C语言:用递归函数DigitSum(n)实现输入1729,输出sum=1+7+2+9=19的值
- C语言:编写reverse_string(char * string)(递归实现)函数,将参数字符串中的字符反向排列
- C语言:编写一个函数实现n^k,使用递归实现
- C语言:模拟实现strstr函数,若是子串,输出子串后面的字符串,否则输出null