找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 225|回复: 4

自己实现字符串的复制功能

[复制链接]

210

主题

371

回帖

0

积分

管理员

积分
0
发表于 2013-8-15 15:18:26 | 显示全部楼层 |阅读模式
我们实现字符串的复制功能时可以使用库函数strcpy()来实现,这里我自己实现了一个该功能的函数,很简单的例子:
接口函数char *copy_string(char *string1, char *string2)

210

主题

371

回帖

0

积分

管理员

积分
0
 楼主| 发表于 2013-8-15 15:19:37 | 显示全部楼层
这里同样是使用fgets()函数来实现的:
#include<stdio.h>
#define MAX 1024
char *copy_string(char *string1, char *string2)
{
char *string = string2;
while(&#39;\0&#39; != *string1)
{
  if(&#39;\n&#39; != *string1)
  {
   *string2 = *string1;
   string1++;
   string2++;
  }
  else
  {
   break;
  }
}
return string;
}
int main()
{
char string1[MAX] = {0}, string2[MAX] = {0};
fgets(string1, 1024, stdin);
copy_string(string1, string2);
  
printf("the copy string is %s\n", string2);
}

210

主题

371

回帖

0

积分

管理员

积分
0
 楼主| 发表于 2013-8-15 15:22:48 | 显示全部楼层
有一个地方不太明白的就是为什么这里copy_string()函数会有返回值,我查看原函数strcpy()也是有返回值的,均为char *类型的。
看下面的例子:
int length = strlen( strcpy(str, “Hello World”) );
你就能发现奥秘了。为了实现链式操作,将目的地址返回,原来说的就是这么一会事:
strcpy函数可以作为另外一个函数的实参。
所以有返回值的copy_tring()的用处就更广泛了。

205

主题

172

回帖

6921

积分

论坛元老

积分
6921
发表于 2013-8-15 17:10:22 | 显示全部楼层
其实核心部分只要一行即可完成:
while( (*string1++ = *string2++ ) );
……
return string1;

210

主题

371

回帖

0

积分

管理员

积分
0
 楼主| 发表于 2013-8-15 17:22:35 | 显示全部楼层
恩,是啊,当时写的时候没有太多想,这样改了后简洁多了。。。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

果子博客
扫码关注微信公众号

Archiver|手机版|小黑屋|风叶林

GMT+8, 2026-2-1 04:42 , Processed in 0.080239 second(s), 20 queries .

Powered by 风叶林

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表