拷贝函数如何写
来源:互联网 发布:linux中yum命令 编辑:程序博客网 时间:2024/05/17 04:45
今天,我来为大家讲讲拷贝函数的一些写法,以下面的函数为例:
#include <stdio.h>
#include <string.h>
void Mystrcpy1(char *str1,char *str2)//str1= str2
{
inti;
for(i=0;str2[i]!='\0';i++)(第一种)
{
str1[i]= str2[i];
}
str1[i]= '\0';
}
把上面的数组改写成指针样式,它们之间转化关系是:arr[i]=*(arr+i),因此,可转换为以下形式
void Mystrcpy2(char *str1,char *str2)
{
inti;
for(i=0;*(str2+i)!='\0';i++)//p[i]== *(p+i)
{
*(str1+i)= *(str2+i);
}
*(str1+i)= '\0';
}
这个函数是把for循环改写成while循环,相比较而言能简单一点
void Mystrcpy3(char *str1,char *str2)
{
while(*str2!= '\0')(第二种)
{
*str1= *str2;
str1++;
str2++;
}
*str1= '\0';
}
把while循环语句中的语句进行了简写
void Mystrcpy4(char *str1,char *str2)
{
while(*str2!= '\0')(第三种)
{
*str1++= *str2++;
}
*str1= '\0';
}
这个函数中的语句更加的简单了,但是却不容易理解,就是*str1++ = *str2++这一句,接下来,我来简单地分析一下
而语句里面的“=”是赋值的意思“++”和“*”是同级运算符,自右向左进行运算,而“str++”的意思是先运行然后再加,因此,并不影响结果。
void Mystrcpy5(char *str1,char *str2)
{
while(*str1++= *str2++) ;(第四种)
}
以下的这个函数和上面的函数是一个意思,只是这是拷贝函数的正规写法
char * Mystrcpy(char *des,char *src)//des =src
{
char*p = des;
while(*des++ = *src++) ;
returnp;
}
int main()
{
charstr1[100] = "abcdef";
charstr2[100] = "hyz";
charstr3[100];
charstr4[100];
//Mystrcpy(str4,Mystrcpy(str3,str2));//链式表达
Mystrcpy(str3,str2);
Mystrcpy(str4,str2);
printf("%s\n",str3);
printf("%s\n",str4);
- 拷贝函数如何写
- 拷贝构造函数如何写
- 写一个内存拷贝函数
- 写一个内存拷贝函数
- 汇编写的内存拷贝函数
- fork函数的写时拷贝
- 汇编写的内存拷贝函数
- 如何写format函数
- 如何写递归函数
- 如何写递归函数
- 如何写函数
- 如何写递归函数
- 如何写memset函数
- 如何写mexFunction函数
- C++拷贝构造函数(深拷贝,浅拷贝)------别人写的很好,参考一下。
- 何时需要写拷贝构造函数,何时需要写析构函数
- 写一个函数,完成内存之间的拷贝
- 关于拷贝构造函数的猜想【很久之前写的】
- 常见算法网站收藏
- linux驱动---字符驱动
- PAT乙级1027 打印沙漏
- 理解CapsuleNetwork2
- string和basic_string的关系
- 拷贝函数如何写
- 关于ubuntu中桌面快捷方式.desktop文件的编写
- JAVA基础(一)
- Learning ELK Stack.pdf 英文原版 免费下载
- STM32f103c8t6作USBCDC的尝试
- 【JZOJ 5485】 字符串
- 递推 钥匙计数之一
- A. ACM ICPC
- sql server 附加数据库报错