void *memcpy(void">

多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > 互聯網 > 2015 百度筆試的一道經典題目

2015 百度筆試的一道經典題目

來源:程序員人生   發布時間:2014-10-08 18:54:38 閱讀次數:2743次

請編碼實現memcpy函數:void *memcpy(void *dst,const void *src,unsigned int count)  顯然是內存復制函數

下面是本人結合memcpy的源代碼實現的一個測試用例,請大家指點

#include <stdio.h> void *memcpy(void *dst,const void *src,unsigned int count) { char *p_dst = (char *)(dst); char *p_src = (char *)(src); unsigned int i; if(p_dst>p_src && p_dst<=(p_src+count-1)) { while(count) { *(p_dst+count-1) = *(p_src+count-1); count--; } } else { for(i=0;i<count;i++) { *(p_dst+i) = *(p_src+i); } } return dst; } int main() { int arr[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; memcpy(arr+4,arr,sizeof(int)*6);// 這樣的拷貝 src<dst && src+count-1>dst,也就是說已經產生了覆蓋, //所以用從后往前的復制,進入if for(int i=0;i<10;i++) printf("%d ",arr[i]); // memcpy(arr,arr+4,sizeof(int)*6);// 這樣的拷貝 src>dst && src<dst+count-1, // 這和正常的拷貝一樣,進入else // for(int i=0;i<10;i++) // printf("%d ",arr[i]); printf(" "); return 0; }


1  有人可能會問:你的算法保證了任何情況下都能夠把數據正確的復制到目的地址,但是你有沒有考慮過在復制的過程中,你有可能修改了原始數據呢?
修改了原始串這樣的功能明確么?

回答:對,老兄你說的很對,的確會存在這個問題,舉個例子吧,比如hello world,我們想把中間的空格去掉,濾掉空格就類似于操作系統中有一種內存分配方法,叫做可重地位分區分配,就是把小作業移動,去除中間的空隙,然后空出后面的一塊大的內存地址,供其他程序使用。這樣對原始數據不需要保存的情況下,可以應用這個函數。

2  可能你還有疑問:最后的dst+count = '

主站蜘蛛池模板: 五月婷婷综合在线视频 | 最近中文字幕免费高清版7 最近中文字幕免费国语 | 色干综合 | 亚洲精品乱码久久久久久蜜桃欧美 | 欧美综合自拍亚洲综合 | 国产高清不卡一区二区 | 复仇之路在线观看免费版高清 | 国产亚洲欧美另类久久久 | 色污淫免费 | 日本xxxwww免费视频 | 高清一级做a爱过程免费视频 | 午夜看片网站 | 久久精品国产精品亚洲人人 | 国产亚洲人成网站观看 | 久久做| 范冰冰一级做a爰片久久毛片 | 日韩国产在线观看 | 国产午夜毛片v一区二区三区 | 欧美一区二区三区在线可观看 | 亚洲一级视频在线观看 | 一区二区三区毛片免费 | 国产精品久久久久久一区二区 | 福利视频一二三在线视频免费观看 | 色人阁网站 | 国产成人精品免费视频软件 | 欧美videos黑人巨大 | 三级黄在线播放 | 欧美男人天堂网 | 最近最新视频中文字幕3 | 最近中文字幕免费完整国语 | 欧美天堂色 | 久久免费精品国产72精品剧情 | 亚洲69视频| 欧美成人h版在线观看 | 欧美春色| 日本三级中文 | 男女视频免费观看 | 国产一区二区久久精品 | 午夜dj在线观看免费高清视频在线观看 | 99re这里有免费视频精品 | 另类图片综合网 |