自己实现strcpy()、memcpy()、memmove()、memset(),如何实现,急,在线等

ltfgood 2009-09-18 10:16:43
RT
...全文
452 16 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
ltfgood 2009-09-19
  • 打赏
  • 举报
回复
谢谢 大家帮忙 现已解决
gyang_pinner 2009-09-18
  • 打赏
  • 举报
回复
直接看VC源代码!可以学习的
  • 打赏
  • 举报
回复
google上输入***的源码。
就搞定了。楼主连google都不用?
Dave888Zhou 2009-09-18
  • 打赏
  • 举报
回复
不同的平台有不同的实现。比如glibc中的实现:

char *
strcpy (dest, src)
char *dest;
const char *src;
{
reg_char c;
char *__unbounded s = (char *__unbounded) CHECK_BOUNDS_LOW (src);
const ptrdiff_t off = CHECK_BOUNDS_LOW (dest) - s - 1;
size_t n;

do
{
c = *s++;
s[off] = c;
}
while (c != '\0');

n = s - src;
(void) CHECK_BOUNDS_HIGH (src + n);
(void) CHECK_BOUNDS_HIGH (dest + n);

return dest;
}

可见,它对越界检查非常严格。
ltfgood 2009-09-18
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 wanghao111 的回复:]
去看看吧 http://www.cnblogs.com/wanghao111/archive/2009/09/18/1568962.html O(∩_∩)O~
[/Quote]
谢了 浩子
明天结贴
rejoice914 2009-09-18
  • 打赏
  • 举报
回复

char * strcpy(char *dest,const char * src)
{
assert((dest!=NULL) && (src!=NULL));
char * address = dest;
while ((*dest++ = *src++) != '\0') ;
return address;
}
whg01 2009-09-18
  • 打赏
  • 举报
回复
把VC里的拷出来用就行。
  • 打赏
  • 举报
回复
void * __cdecl memset (
void *dst,
int val,
size_t count
)
{
void *start = dst;

while ( count-- ) {
*( char * )dst = ( char )val;
dst = ( char * )dst + 1;
}

return( start );
}
void * __cdecl memcpy (
void * dst,
const void * src,
size_t count
)
{
void * ret = dst;

while ( count-- ) {
*( char * )dst = *( char * )src;
dst = ( char * )dst + 1;
src = ( char * )src + 1;
}

return( ret );
}

void * __cdecl memmove (
void * dst,
const void * src,
size_t count
)
{
void * ret = dst;

if ( dst <= src || ( char * )dst >= ( ( char * )src + count ) ) {
while ( count-- ) {
*( char * )dst = *( char * )src;
dst = ( char * )dst + 1;
src = ( char * )src + 1;
}

} else {
dst = ( char * )dst + count - 1;
src = ( char * )src + count - 1;

while ( count-- ) {
*( char * )dst = *( char * )src;
dst = ( char * )dst - 1;
src = ( char * )src - 1;
}
}

return( ret );
}
char * __cdecl strcpy( char * dst, const char * src )
{
char * cp = dst;

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

return( dst );
}
wanjingwei 2009-09-18
  • 打赏
  • 举报
回复
strcpy: http://topic.csdn.net/t/20030917/14/2269942.html
memcpy: http://hi.baidu.com/tianpeng_he/blog/item/fc27848186858edebd3e1e4a.html
memmove: http://blog.chinaunix.net/u2/64540/showart_721207.html
memset: http://blog.chinaunix.net/u/25381/showart_206081.html

学会用google
「已注销」 2009-09-18
  • 打赏
  • 举报
回复
CRT有源码的,随便哪个SDK都有。装VS时也有的。
yang_e_2009 2009-09-18
  • 打赏
  • 举报
回复

void strcpy(char* dest,const char* src)
{
while(*src != 0)
*dest++ = *src++;
}
ufdxkm 2009-09-18
  • 打赏
  • 举报
回复
参考下 vc目录下的src 文件夹不就得了

char * __cdecl strncpy (
char * dest,
const char * source,
size_t count
)
{
char *start = dest;

while (count && (*dest++ = *source++)) /* copy string */
count--;

if (count) /* pad out with zeroes */
while (--count)
*dest++ = '\0';

return(start);
}


自己实现也差不多就这样 ?
hoomey 2009-09-18
  • 打赏
  • 举报
回复
???/
楼主的头像????
wanghao111 2009-09-18
  • 打赏
  • 举报
回复
wanghao111 2009-09-18
  • 打赏
  • 举报
回复
啊呀 这么晚还没睡啊 小飞
kouwenlong 2009-09-18
  • 打赏
  • 举报
回复
同等待答案。

65,187

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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