两种方法
#include<stdio.h>
/*int main(void)
{
char a[]="i am a student";
char b[64];
int i=0;
for(i=0;*(a+i)!= '\0';i++)
{
*(b+i)=*(a+i);
printf("%c",b[i]);
}
b[i]='\0';//重要
return 0;
}*/
void copy0(char *from,char *to)
{
for(;*from!='\0';from++,to++)
{
*to=*from;
}
*to ='\0';
return;
}
void copy1(char *from,char *to)
{
for(;*from!='\0';)
{
*to++=*from++;//++优先级高,因为是后缀,所以*to=*from;from++,to++
}
*to ='\0';
return;
}
void copy2(char *from,char *to)
{
while((*to=*from)!='\0')
{
from++;
to++;//结束符已经拷贝过去
}
void copy3(char *from,char *to)
{
while((*to++=*from++)!='\0')
{
}
}
int main(void)
{char *from="abcdefg";
char b[100];
copy(from,b);
printf("%s",b);
return 0;
}
最后加一个,注意这个问题,最后输出的时候容易出错。例如printf(“from %s\n”,from),from最后指向\0,导致无法输出
char*tmpfrom=from;//不要轻易改变形参的值,要引入一个辅助的指针变量
char*tmpto=to;
if(from==NULL||to==NULL)
{
return -1;
}
while(*tmpto++=*tmpfrom++)
{
}
printf(“from %s\n”,from);