库函数memcpy的原型是这样的:void *memcpy(void *dest, const void *src, size_t n); 下面,我们也来写个内存复制函数吧,主要是为了深入了解指针的应用,顺便熟悉一下assert的应用,程序如下:
- #include <iostream>
- #include <cassert>
- using namespace std;
-
- void myMemCpy(void *dst, void *src, int n) // 注意dst和src的习惯顺序
- {
- assert(NULL != dst && NULL != src && n >= 0); // 分号别搞掉了
- char *to = (char *)dst; // 类型转换不可少
- char *from = (char *)src; // 类型转换不可少
- while(n--)
- {
- *to++ = *from++;
- }
- }
-
- int main()
- {
- int a = 100;
- int *pa = &a;
- int b = 20;
- int *pb = &b;
-
- myMemCpy(pb, pa, sizeof(int));
- cout << b << endl;
-
- char str1[] = "hello,world!";
- char str2[] = "cplusplus";
- myMemCpy(str1, str2, strlen(str2));
- cout << str1 << endl;
-
- myMemCpy(str1, str2, sizeof(str2));
- cout << str1 << endl;
-
- cout << endl;
-
- char str3[] = "hello!";
- char str4[] = "cplusplus";
- myMemCpy(str3, str4, strlen(str4));
- cout << str3 << endl; // 很有可能是乱码
-
- myMemCpy(str3, str4, sizeof(str4));
- cout << str3 << endl;
-
- return 0;
- }
结果为:
100
cplusplusld!
cplusplus
cplusplusplusplus
cplusplus