自己写一个函数,实现字符串的拷贝 用纯C写

T0Ols 2011-01-05 11:34:19
自己写一个函数,实现字符串的拷贝 不用C++
...全文
1448 33 打赏 收藏 转发到动态 举报
写回复
用AI写文章
33 条回复
切换为时间正序
请发表友善的回复…
发表回复
神的理想 2012-09-26
  • 打赏
  • 举报
回复
马克mark
T0Ols 2011-01-06
  • 打赏
  • 举报
回复
结贴了。我想出来了
T0Ols 2011-01-06
  • 打赏
  • 举报
回复
[Quote=引用 30 楼 anyidan 的回复:]
引用 3 楼 snowwhite1 的回复:
最简单的。
char *copy(char *to,const char *from)
{
while (*to++=*from++);
return to;
}

+1
[/Quote]但是考虑的不全啊
AnYidan 2011-01-06
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 snowwhite1 的回复:]
最简单的。
char *copy(char *to,const char *from)
{
while (*to++=*from++);
return to;
}
[/Quote]
+1
T0Ols 2011-01-06
  • 打赏
  • 举报
回复
真的假的?你去的是应聘什么的啊?[Quote=引用 26 楼 ll0903 的回复:]
靠,今天早上面试就遇到了,靠,早点看到就好了
[/Quote]
bluesky12312388 2011-01-05
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 ynb119 的回复:]
写一个,没测试。。
C/C++ code

myMemCopy(char *dest, char *source, int size)
{
int longNum = 0;
int shortNum = 0;
int charNum = 0;

longNum = size / 4;
shor5Num = (size % 4) / 2;
charNum = siz……
[/Quote]
1.没考虑覆盖
2.short 不为字节
3.不是字符串复制
bluesky12312388 2011-01-05
  • 打赏
  • 举报
回复

1.得分最低的
void * strcpy(char *dest, const char *src)
{
while(*dest++ = *src++);
}
2.好一点的
char * strcpy(char *dest,const char *src)
{
char * temp;
temp = dest;
while(*dest++ = *src++);
return temp;
}
3可以接受的
char * strcpy(char *dest,const char *src)
{
assert( dest != src);
assert( dest != NULL || src != NULL);
char *temp = dest;
while(*dest++ = *src++);
return temp;
}
极简Qt 2011-01-05
  • 打赏
  • 举报
回复
呵呵,这多像网上出的面试题啊!
flysnowhite 2011-01-05
  • 打赏
  • 举报
回复
最简单的。
char *copy(char *to,const char *from)
{
while (*to++=*from++);
return to;
}
枫桦沐阳 2011-01-05
  • 打赏
  • 举报
回复

写一个,没测试。。

myMemCopy(char *dest, char *source, int size)
{
int longNum = 0;
int shortNum = 0;
int charNum = 0;

longNum = size / 4;
shor5Num = (size % 4) / 2;
charNum = size % 2;

// 4字节Copy
for(int iCnt = 0; iCnt < longNum; iCnt++)
{
*(long *)dest = *(long *)source;

source = source + 4;
dest = dest + 4;
}

// 剩余2字节copy
for(int iCnt = 0; iCnt < shortNum; iCnt++)
{
*(short *)dest = *(short *)source;

source = source + 2;
dest = dest + 2;
}

// 剩余1字节Copy
for(int iCnt = 0; iCnt < charNum; iCnt++)
{
*(short *)dest = *(short *)source;

source = source + 1;
dest = dest + 1;
}
}
hai040 2011-01-05
  • 打赏
  • 举报
回复
char * __cdecl strcpy(char * dst, const char * src)
{
char * cp = dst;

while( *cp++ = *src++ )
; /* Copy src over dst */

return( dst );
}
luuillu 2011-01-05
  • 打赏
  • 举报
回复
带覆盖处理版


void * strcpy(char *dest, const char *src)
{
char *p=src;
int n=0;
while(*p!='\0') //计算源字符串长度
++n;
int dif=dest-src; //地址差
if (dif<0 || dif>n) //如果不重叠从前面复制
while (*dest++ = *src++);
else if (dif<=n) //否则从后面复制
{
for (p=src+n; p<= src; --p)
*(p+dif)=*p;
}

}

LL0903 2011-01-05
  • 打赏
  • 举报
回复
靠,今天早上面试就遇到了,靠,早点看到就好了
bluesky12312388 2011-01-05
  • 打赏
  • 举报
回复




1. 读取四个字节,构成一个int
2. 判断这个int里面有没有包含c string的终结符'\0'
3. 包含的话,按byte拷贝
4. 不包含的话,按int拷贝
5. 回到1
考虑到效率可以不用作错误检查。
这就是最好的版本。


T0Ols 2011-01-05
  • 打赏
  • 举报
回复
其实我想要一个 考虑非常全面的一个
bluesky12312388 2011-01-05
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 cheneywong 的回复:]

引用 5 楼 bluesky12312388 的回复:

C/C++ code

1.得分最低的
void * strcpy(char *dest, const char *src)
{
while(*dest++ = *src++);
}
2.好一点的
char * strcpy(char *dest,const char *src)
{
char * temp;
t……
[/Quote]
是你在搞笑,无知的人是非常可怕的!
bluesky12312388 2011-01-05
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 matrixcl 的回复:]

引用 5 楼 bluesky12312388 的回复:

1.得分最低的
void * strcpy(char *dest, const char *src)
{
while(*dest++ = *src++);
}
2.好一点的
char * strcpy(char *dest,const char *src)
{
char * temp;
temp = dest;
w……
[/Quote]
VC是采用汇编实现,并且作了对齐优化
bluesky12312388 2011-01-05
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 liuhex 的回复:]

引用 5 楼 bluesky12312388 的回复:
C/C++ code

3可以接受的
char * strcpy(char *dest,const char *src)
{
assert( dest != src);
assert( dest != NULL || src != NULL);
char *temp = dest;
while(*dest++ = *src……
[/Quote]
谢谢提醒!
flysnowhite 2011-01-05
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 bluesky12312388 的回复:]
C/C++ code

1.得分最低的
void * strcpy(char *dest, const char *src)
{
while(*dest++ = *src++);
}
2.好一点的
char * strcpy(char *dest,const char *src)
{
char * temp;
temp = dest;
whil……
[/Quote]

评价虽然合理,但C本身要求简洁,一定程度上由用户来保证正确性,若需要所有情况都考虑到,没必要使用C了。
古沐风 2011-01-05
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 bluesky12312388 的回复:]

C/C++ code

1.得分最低的
void * strcpy(char *dest, const char *src)
{
while(*dest++ = *src++);
}
2.好一点的
char * strcpy(char *dest,const char *src)
{
char * temp;
temp = dest;
while(*dest++ ……
[/Quote]
搞笑,这评论的好像是大师样...
我就看不懂了,2、3中的返回一个野指针有何用?
加载更多回复(11)

70,014

社区成员

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

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