您的位置:首页 > 其它

C++问题---内存拷贝函数设计与测试问题

2009-09-25 11:22 477 查看
-------------------------------------

典型例题8:C++问题---内存拷贝函数设计与测试问题;

-------------------------------------

//这个例子来自周立功blog

1 #include <stdio.h>

2 #include <string.h>

3 #include <assert.h>

4

5 void * MyMemMove(void *dst,const void *src,int count)

6 {

7 assert(dst);

8 assert(src);

9

10 void * ret = dst;

11 if (dst <= src || (char *)dst >= ((char *)src + count)) {

12 while (count--) {

13 *(char *)dst = *(char *)src;

14 dst = (char *)dst + 1;

15 src = (char *)src + 1;

16 }

17 }

18 else {

19

20 dst = (char *)dst + count - 1;

21 src = (char *)src + count - 1;

22

23 while (count--) {

24 *(char *)dst = *(char *)src;

25 dst = (char *)dst - 1;

26 src = (char *)src - 1;

27 }

28 }

29 return(ret);

30 }

31

32 void Test()

33 {

34 char p1[256] = "hello,world!";

35 char p2[256] = {0};

36 MyMemMove(p2,p1,strlen(p1)+1);

37 printf("%s/n",p2);

38 //MyMemMove(NULL,p1,strlen(p1)+1);

39 //MyMemMove(p2,NULL,strlen(p1)+1);

40 MyMemMove(p1+1,p1,strlen(p1)+1);

41 printf("%s/n",p1);

42 char p3[256] = "hello,world!";

43 MyMemMove(p3,p3+1,strlen(p3)+1);

44 printf("%s/n",p3);

45

46 }

47 int main()

48 {

49 Test();

50 return 0;

51 }

--------------------------

$ ./a.out

hello,world!

hhello,world!

ello,world!

--------------------------

1 #include<iostream>

2

3 using namespace std;

4 //有重叠区域的内存拷贝函数

5

6 void* mymemcpy( void *dest, const void *src, size_t count )

7 {

8 char* pdest = static_cast<char*>( dest );

9 const char* psrc = static_cast<const char*>( src );

10 /*

11 ***********************************************

12 *[0][1][2][3][4][5][6][7][8][9]<---psrc

13 * 0 1 2 3 4 5 6 7 8 9

14 * [0][1]... ...[8]<---pdest

15 ***********************************************

16 */

17 if(pdest>psrc && pdest<psrc+count )

18 {

19 for( size_t i=count-1; i!=(size_t)-1; --i )

20 pdest[i] = psrc[i];

21 }

22 else

23 {

24 for( size_t i=0; i<count; ++i )

25 pdest[i] = psrc[i];

26 }

27 return dest;

28 }

29 int main( void )

30 {

31 char str[12] = "0123456789";

32 mymemcpy( str+1, str+0, 9 );

33 cout << str << endl;

34 /*

35 ***********************************************

36 *str="0012345678"

37 ***********************************************

38 */

39 return 0;

40 }

41
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: