关于字符串复制函数的问题

lj860603 2006-04-23 08:32:25
大家好,想请教一个简单问题,我想写关于字符串复制的函数,但不知道为什么复制不了,
请大家帮我看看代码(程序简单没写注释):
====================================
#include<stdio.h>

char *strcpy(char *destination,const char *source);

int
main(void)
{
char string1[20],string2[20];
printf("Please input the string2:\n");
gets(string2);
printf("Now the string1 is:%s",*strcpy(string1,string2));
printf("\n");
return 0;
}
//=============================================
char
*strcpy(char *destination,const char *source)
{
while(*destination++=*source++)
;
return (destination-1);
}
...全文
224 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
lj860603 2006-04-23
  • 打赏
  • 举报
回复
谢谢影子传说:) 我采用了比较烂的方法,计算字符串的长度,程序修改如下:
================================
#include<stdio.h>
#include<string.h>

char *strcpy(char *destination,const char *source,int size);

int
main(void)
{
int i;
char string1[20],string2[20];
printf("Please input the string2:\n");
gets(string2);
i=strlen(string2);
printf("Now the string1 is:%s",strcpy(string1,string2,i));
printf("\n");
return 0;
}
//==================================================
char
*strcpy(char *destination,const char *source,int size)
{
while(*destination++=*source++)
;
return (destination-size-1);
}
YFY 2006-04-23
  • 打赏
  • 举报
回复
“高质量C++编程”里有个现成的:

char *_mystrcpy(char *destination,const char *source);

char *_mystrcpy(char *strDest, const char *strSrc)
{
//assert((strDest!=NULL) && (strSrc !=NULL));

char *address = strDest;

while( (*strDest++ = * strSrc++) != '\0' )
NULL ;

return address ;
}

char string1[20],string2[20];
printf("Please input the string2:\n");
gets(string2);
printf("Now the string1 is:%s",_mystrcpy(string1,string2));
printf("\n");
return 0;

如果输入没有越界就可以打印了。

pacman2000 2006-04-23
  • 打赏
  • 举报
回复
printf的%s本身说明后面对应的参数是char *类型,所以不用加。
关于返回首地址,可以用个临时变量在函数一开始保存下来啊。
lj860603 2006-04-23
  • 打赏
  • 举报
回复
printf("Now the string1 is:%s",*strcpy(string1,string2));
这里的strcpy不需要前面加*
//为什么不用加呢?
========================================
经过了循环while(*destination++=*source++)后destination指向了字符串最后一个字符,那返回应该是这个字符串的首地址,怎么实现返回首地址?因为不知道长度,如果动态分配内存再把
destination减去长度让它指向首地址返回,这样会不会太麻烦了?
lei001 2006-04-23
  • 打赏
  • 举报
回复
mark
pacman2000 2006-04-23
  • 打赏
  • 举报
回复
不是动态分配的原因,
printf("Now the string1 is:%s",*strcpy(string1,string2));
这里的strcpy不需要前面加*
然后,strcpy函数实现里,
return (destination-1);这个不对。因为destination-1也就在最后的'\0'结束处,不是在字符串开头。
lolitaline 2006-04-23
  • 打赏
  • 举报
回复
动态分配内存空间。

69,336

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧