国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C > 正文

深入理解memmove()與memcpy()的區別以及實現方法

2020-02-24 14:27:25
字體:
來源:轉載
供稿:網友

memcpy和memmove的區別在實現方面,memcpy是一個直接拷貝,如果兩個指針重疊,結果是未知的,下文是武林技術頻道小編和大家分享的深入理解memmove()與memcpy()的區別以及實現方法,一起來了解一下吧!


代碼如下所示:

?

?

?


// MemMove.cpp : 定義控制臺應用程序的入口點。
//
#include "stdafx.h"
#include <iostream>
using namespace std;

?

?

?


void* memmove(void* dest, const void* src, size_t n)
{
?if (n <= 0)
?{
? cout << "Invalid count number." << endl;
?}
?if (dest == NULL || src == NULL)
?{
? cout << "The dest or src address is null." << endl;
?}
?if (dest == src)
?{
? cout << "The dest equals src." << endl;
?}
?if ((char*)dest <= (char*)src || (char*)dest >= (char*)src + n)
?{//對應圖中2,3,4三種情況,賦值過程中,src中未使用的不會被覆蓋
? char* de = (char*)dest;
? const char* sr = (const char*)src;
? while (n--)
? {
?? *de++ = *sr++;
? }
?}
?else
?{//對應圖中的第一種情況
? char* de = (char*)dest + n -1;
? const char* sr = (const char*)src + n - 1;
? while (n--)
? {
?? *de-- = *sr--;
? }
?}
?return dest;
}

?

?

?


void* memmcpy(void* dest, const void* src, size_t n)?
{?
? if (n <= 0)?
{?
? cout << "Invalid count number." << endl;?
}?
?if (dest == NULL || src == NULL)?
?{?
???? cout << "The dest or src address is null." << endl;?
?}?
?if (dest == src)?
?{?
?? cout << "The dest equals src." << endl;?
?}?
?char* de = (char*)dest;?
?const char* sr = (const char*)src;?
?while (n--)?
?{?
?? *de++ = *sr++;?
?}?
? return dest;?
}?

?

?

?


int _tmain(int argc, _TCHAR* argv[])
{
?char* p = "hello,world";?
?char dest[12] = {0};
?char *q = (char*)memmove(dest,p,5);
?cout << dest << endl;???
?cout << q << endl;?
?return 0;??
}

深入理解memmove()與memcpy()的區別以及實現方法就為各位朋友們介紹到這里了。大家可以在上文看到非常多優秀的文章,大家可以從武林技術頻道獲取全面的內容。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 社会| 越西县| 滕州市| 太湖县| 绍兴县| 阿合奇县| 大渡口区| 凤城市| 逊克县| 株洲县| 延吉市| 四会市| 阆中市| 云龙县| 永胜县| 衡阳市| 左权县| 社会| 集贤县| 德保县| 开封县| 大冶市| 巴马| 苍南县| 涞源县| 邢台市| 宜春市| 神池县| 峨边| 禄丰县| 玛纳斯县| 永川市| 石泉县| 松原市| 大同县| 华阴市| 泌阳县| 漠河县| 临洮县| 永清县| 乌兰浩特市|