`
hulianwang2014
  • 浏览: 689827 次
文章分类
社区版块
存档分类
最新评论
  • bcworld: 排版成这样,一点看的欲望都没有了
    jfinal

strcpy和memcpy的标准实现

 
阅读更多

strcpy和memcpy都是标准C库函数,它们有下面的特点。
strcpy提供了字符串的复制。即strcpy只用于字符串复制,并且它不仅复制字符串内容之外,还会复制字符串的结束符。

已知strcpy函数的原型是:char* strcpy(char* dest, const char* src);
memcpy提供了一般内存的复制。即memcpy对于需要复制的内容没有限制,因此用途更广。
void *memcpy( void *dest, const void *src, size_t count );

#include <iostream>
#include <string.h>
#include <cassert>
using namespace std;

char* strcpy(char *dst, const char *src) {
	assert(src != NULL);
	assert(dst != NULL);
	char *ret = dst;
	while((*dst++ = *src++) != '\0') ;
	return ret;
}

void* memcpy(void *dst, const void *src, size_t len) {
	assert(src != NULL);
	assert(dst != NULL);
	void *ret = dst;
	int i = len;
	if(src < dst) 
	{
		char *csrc = (char *)src;
		char *cdst = (char *)dst;
		while(i--)
		{
			*cdst++ = *csrc++;
		}
	} 
	else 
	{
		char *csrc = (char *)src + len - 1;
		char *cdst = (char *)dst + len - 1;
		while(i--) 
		{
			*cdst-- = *csrc--;
		}
	}

	return ret;
}

int main() {
	char *src = "hello world";
	char *dst = new char[0];
	cout << strcpy(dst, src) << endl;
	void *memsrc = (void *)"hello";
	char memdst[6];
	memdst[5] = '\0';
	cout << (char *)memcpy(memdst, memsrc, 5) << endl;

	return 0;
}


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics