1. 程式人生 > >UNIX /Linux中的memcpy函式用法詳解

UNIX /Linux中的memcpy函式用法詳解

原型:extern void *memcpy(void *dest, void *src, unsigned int count);

用法:#include <string.h>

功能:由src所指記憶體區域複製count個位元組到dest所指記憶體區域。

說明:src和dest所指記憶體區域不能重疊,函式返回指向dest的指標。

舉例:

      // memcpy.c

      #include <syslib.h>

      #include <string.h>

      main()

      {

        char *s="Golden Global View";

        char d[20];

        clrscr();

        memcpy(d,s,strlen(s));

        d[strlen(s)]=0;

        printf("%s",d);

        getchar();

        return 0;

      }

看下面這個程式碼:

void *memcpy(void *dest,void *src, unsigned int count)

{

assert((dest!=NULL)&&(src!=NULL));

if(dest==src)

return src;

char* d=(char*)dest;

char* s=(char*)src;

while(count--> 0)

*d++=*s++;

return dest;

}

這是一個memcpy的原始碼,可以看看,在函式裡面生成臨時指標,這樣不會改變原始指標

函式原型:extern void *memmove(void *dest, const void *src, unsigned int count)

引數說明:dest為目的字串,src為源字串,count為要拷貝的位元組數。

所在庫名:#include <string.h>

函式功能:將字串src中的前n個位元組拷貝到dest中。

返回說明:src和dest所指記憶體區域可以重疊,函式返回void*型別指標。 www.yueluo.net

其它說明:功能於memcpy相同。

不同的是,當src和dest所指的記憶體區域重疊時,memmove()仍然可以正確的處理,不過執行效率上會比使用memcpy()略慢些

memcpy()、 memmove()和memccpy()

-------------------------------------------------------

    這三個函式的功能均是將某個記憶體塊複製到另一個記憶體塊。前兩個函式的區別在於它們處理記憶體區域重疊(overlapping)的方式不同。第三個函式的功能也是複製記憶體,但是如果遇到某個特定值時立即停止複製。

    對於庫函式來說,由於沒有辦法知道傳遞給他的記憶體區域的情況,所以應該使用memmove()函式。通過這個函式,可以保證不會出現任何記憶體塊重疊問題。而對於應用程式來說,因為程式碼“知道”兩個記憶體塊不會重疊,所以可以安全地使用memcpy()函式。

-------------------------------------------------------

#include <string.h>

#include <stdio.h>

int main()

{

    char s[] = "zengxiaolong";

    memmove(s, s+4, strlen(s)-4);

    s[strlen(s)-4] = '\0';

    printf("*s = %s\n", s);

    return 0;

}

memcpy與strncpy區別

    strncpy是把Num個字元從src複製到dest,但是如果遇到src字元結尾,那麼複製提前結束,後面沒有複製完的字元,不予以處理,當然dest,src地址不能重疊,

    memcpy也是把Num個字元從src複製到dest,但是它是記憶體複製,不管是不是NULL,照樣通吃

相關推薦

UNIX /Linuxmemcpy函式用法

原型:extern void *memcpy(void *dest, void *src, unsigned int count); 用法:#include <string.h>

linux 特殊符號用法

引號 zabbix 目錄 sele cond 特殊符號 zab set speed 星號(*) 當用於shell變量時, [root@zabbix_nuc ~]# sql=‘select * from mysql.user‘ [root@zabbix_nuc ~]# ech

linux之select函式用法

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

linuxmariadb基本用法(企業級)

資料庫 表的每一個列名字的頭   叫做欄位 是高階的exel表格軟體 資料庫種類 sqlserver  sqllite  db2   oracle  > mysql   比較多   其中my

linux sed的用法

sed 是操作,過濾和轉換文字內容的強大工具,sed可以從檔案和管道中讀取輸入。 sed 命令語法 sed [ option ] {sed -commands} {input -file} -e :執行多個sed命令 -n :只顯示操作行 -i

Linuxln命令用法

硬連線指向的是節點(inode),是已存在檔案的另一個名字,修改其中一個,與其連線的檔案同時被修改;對硬連結檔案進行讀寫和刪除操作時候,效果和符號連結相同。但如果我們刪除硬連結檔案的原始檔,硬連結檔案

#Python第三方模組學習(二)——numpyloadtxt函式用法

本篇系轉載文章,並在原文的基礎上補充引數delimeter的說明 umpy中有兩個函式可以用來讀取檔案,主要是txt檔案, 下面主要來介紹這兩個函式的用法 第一個是loadtxt, 其一般用法為 numpy.loadtxt(fname, dtype=, commen

Python3正則模組re.compile、re.match及re.search函式用法

本文例項講述了Python3中正則模組re.compile、re.match及re.search函式用法。分享給大家供大家參考,具體如下: re模組 re.compile、re.match、 re.search re 模組官方說明文件 正則匹配的時候,第一個字元是 r,表示 raw string 原生字

JavaScriptbind、call、apply函式用法

在給我們專案組的其他程式介紹 js 的時候,我準備了很多的內容,但看起來效果不大,果然光講還是不行的,必須動手。前幾天有人問我關於程式碼裡 call() 函式的用法,我讓他去看書,這裡推薦用js 寫伺服器的程式猿看《javascript程式設計精粹》 這本書,crockfo

Linux 在Shell指令碼使用函式例項

Shell的函式 Shell程式也支援函式。函式能完成一特定的功能,可以重複呼叫這個函式。 函式格式如下: 1 2 3 4 函式名() { 函式體 }  函式呼叫方式: 函式

JavaScriptreturn的用法

style 返回 www log tle blog 意思 charset fun 1、定義:return 從字面上的看就是返回,官方定義return語句將終止當前函數並返回當前函數的值,可以看下下面的示例代碼: <!DOCTYPE html><html l

java的instanceof用法

定義 xtend print 繼承 interface 參數 保留 如果 ack   instanceof是Java的一個二元操作符(運算符),也是Java的保留關鍵字。它的作用是判斷其左邊對象是否為其右邊類的實例,返回的是boolean類型的數據。用它來判斷某個對象是否是

C#HttpWebRequest的用法

網站 default 編碼方式 對數 c# toarray collect acc like 本文實例講述了C#中HttpWebRequest的用法。分享給大家供大家參考。具體如下: HttpWebRequest類主要利用HTTP 協議和服務器交互,通常是通過 GET 和

(轉)Linux命令之Ethtool用法

如果 size ram phy 基本設置 速度 終端 網卡驅動 sed Linux命令之Ethtool用法詳解 原文:http://www.linuxidc.com/Linux/2012-01/52669.htm Linux/Unix命令之Ethtool描述:Eth

1.12-linux三劍客之awk用法

-a proc == 行號 oss url oldboyedu rap oai 1.12linux三劍客之awk用法詳解內容:1. awk執行過程2. awk命令格式3. awk用法4. awk數組第1章 awk執行過程 一直讀取到文件的最後一行第2章 awk ‘找誰{幹啥

C++的map用法

時間 占用 sort函數 數組 例程 通道 組織 sso 查找 Map是 STL的一個關聯容器,它提供一對一(其中第一個可以稱為關鍵字,每個關鍵字只能在map中出現一次,第二個可能稱為該關鍵字的值)的數據 處理能力,由 於這個特性,它完成有可能在我們處理一對一數據的

【轉載】 c++static的用法

ostream 並不會 style 轉載 程序員 都是 note 每次 reference 出處: http://blog.csdn.net/majianfei1023/article/details/45290467 C 語言的 static 關鍵字有三種(具體來說是

mysql where in 用法

MySQL這裏分兩種情況來介紹 1、in 後面是記錄集,如: select * from table where uname in(select uname from user); 2、in 後面是字符串,如: select * from table where uname

linuxFTP服務搭建--1.匿名與權限

一行 ext enforce 實驗環境 沒有 allow umask pda yar 實驗環境:在redhat6.5中安裝配置FTP服務,並使用一臺win7系統訪問驗證。理論:FTP連接方式 支持兩種連接模式:主動模式(Port)和被動模式(Pasv),這兩種模式

linuxFTP服務搭建--2.家目錄禁錮和黑白名單

ip 地址 問題 ges 添加 無法 sftp 分享圖片 deny ecb 操作環境 1 操作系統 : redhat 6.5 IP 地址 : 192.168.10.128 主機名 : zred2 操作系統:win 7 IP地址: 192.168.10