c

来源:互联网 发布:js 鼠标的位置 编辑:程序博客网 时间:2024/06/04 00:43
#include <stdio.h>#include <stdlib.h>#include <string.h>#include <sys/types.h>#include <fcntl.h>#include <unistd.h>void *mymemcpy(void *desc,const void * src,size_t size){ if((desc == NULL) && (src == NULL)) {  return NULL; } unsigned char *mydesc = (unsigned char*)desc; unsigned char *mysrc = (unsigned char*)src; while(size-- >0) {  *mydesc = *mysrc;  mydesc++;  mysrc++; } return desc;}int main(int argc, char* argv[]){ int dest[2] = {0}; const char src[5] = "1234"; //printf(src); mymemcpy(dest,src,sizeof(src)); //*(dest+5) = '/0'; printf("%s\n",(char *)dest); return 0;}

注意事项:(1)void* 一定要返回一个值(指针),这个和void不太一样!
(2)首先要判断指针的值不能为空,desc为空的话肯定不能拷贝内存空间,src为空相当于没有拷贝;所以之间return掉;
(3)”“空串是指内容为0,NULL是0,不是串;两个不等价;
(4)int dest[2] = {0};这是对int 类型的数组初始化的方法;如果是char类型,就用char a[5] = “1234”; 注意数组下标要
多于实际看到的字符数,因为还有’/0’
(5)printf((char *)dest);这句话,是把 char 类型 src 传到 int 类型的 dest的内存强制转化成char类型,然后打印出来;
因为直接看int类型的dest是看不到里面的内容的;因为有unsigned char desc1 = (unsigned char)desc;所以字符可以传
到dest里面保存起来,dest所指向的内存长度4个字节,强制转化为char 就是把四个字节分成一个一个的字节,这样就可以看到
一个个字符了,如果定义成char dest[5] = “1234”;就不用转化;呵呵,表达起来真累人;
(6)memcpy1(dest,src,sizeof(src));注意里面的sizeof(src),这个是包括字符串的结束符’/0’的;所以不用担心printf(dest);
但是如果用memcpy1(dest,src,4);没有’/0’就要*(dest+5) = ‘/0’;这样保证是一个完整的字符串;
(7)如果初始化的时候:
char dest[1024] = “12345666”;//{0};
const char src[5] = “3333”;
那么拷贝的时候,如果用memcpy1(dest,src,sizeof(src));则printf(dest);出来是3333
如果memcpy1(dest,src,4);则printf(dest);出来是33335666;因为上面的sizeof(src),包含’/0’,所以拷贝过去的字符串以’/0’
结束,就只有3333,而如果传4个字符,’/0’是第五个字符,那就遇到dest[1024] 的’/0’结束,所以是33335666
字符串的’/0’问题一定要注意啊!!!