void *memcpy(void">

日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

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

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

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

請編碼實現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 = '

主站蜘蛛池模板: 精品视频在线免费观看 | 99精品国产成人一区二区 | 久热这里只有精品6 | 51精产品一区一区三区 | 操操综合 | 国产精品免费观看视频 | 成人在线视频播放 | 亚洲国产精品自拍 | 国产精品久久国产精品 | 国产一区二区三区四区五区 | 久久久精品免费 | 日韩欧美影院 | 国产精品29页 | 色欧美在线| 欧美 日韩 国产 成人 在线 91 | 成年人黄色片 | 三级网站免费看 | 亚洲精品视频一区二区三区 | 免费av网站在线看 | 免费在线观看一区 | 国产伦精品一区二区三区免费视频 | 玖玖色资源 | 久久99亚洲精品 | 亚洲国产成人精品久久久国产成人一区 | av免费网 | 久久久久久亚洲精品 | 久久久久国产精品免费免费搜索 | 欧美日韩精品一区二区 | a一级黄色大片 | 精品人伦一区二区三区蜜桃网站 | 综合色婷婷一区二区亚洲欧美国产 | 亚洲欧美日韩久久精品 | 国产精品成人品 | 九九九久久久久久久 | 中文视频在线 | 国产欧美精品一区二区三区 | 欧美精品一区二区三区视频 | 国产精品久久久久久久免费大片 | 黄色免费网站在线观看 | 国产一级片 | 一区二区国产精品 |