天天看點

讓你提前認識軟體開發(8):memset()與memcpy()函數

第1部分 重新認識C語言

memset()與memcpy()函數

        軟體項目中的代碼,少則數千行,多則上萬行,但并非無規律可循。閱讀了那麼多代碼之後,我發現有兩個函數出現的頻率很高,那就是memset()與memcpy()函數,它們都是C語言程式設計中經常要用到的。工作之餘,我查了一些資料,現對它們作一個簡單的說明。

        1. memset()函數

        (1)函數原型

        void *memset( void *dest, int c, size_t count )。

        (2)函數作用

        在MSDN中,将該函數的作用描述為:Sets buffers to a specified character,即:将緩存設定為一個專門的字元。簡單地說,就是将已開辟記憶體空間dest的首count個位元組的值設為值c。

        (3)應用舉例

/***************************************************************

*版權所有 (C)2014, Zhou Zhaoxiong。

*

*檔案名稱:memset.c

*内容摘要:用于測試memset函數

*其它說明:無

*目前版本:V1.0

*作   者:周兆熊

*完成日期:20140329

*修改記錄1:   //修改曆史記錄,包括修改日期、版本号、修改人及修改内容等

*   修改日期:

*   版本号:

*   修改人:

*   修改内容:

***************************************************************/

#include <memory.h>

#include <stdio.h>

typedef signed char INT8;                       //重定義資料類型

typedef signed int  INT32;                     //重定義資料類型

/**********************************************************************

 *功能描述:主函數

 *輸入參數:無

 *輸出參數:無

 *傳回值:無

 *其它說明:無

 *修改日期           版本号          修改人        修改内容

 * ------------------------------------------------------------------------------------------------------

 * 20140329            V1.0            周兆熊          建立

 ***********************************************************************/

INT32 main(void)

{

    INT8 szTestStr[100] = "AAAAAAAAAA";

    printf("The original string is: %s\n", szTestStr);

    memset(szTestStr, 'B', 5);     //調用memset函數

    printf("The changed string is: %s\n", szTestStr);

    return 0;

}

       該程式的輸出結果為:

讓你提前認識軟體開發(8):memset()與memcpy()函數

       (4)重要應用

       除了對指定位置設定值之外,該函數還可以用于記憶體空間初始化、記憶體拷貝、清空一個結構類型的變量或數組等。

       2. memcpy()函數

       (1)函數原型

       void *memcpy( void *dest, const void *src, size_t count )。

       (2)函數作用

       在MSDN中,将該函數的作用描述為:Copies characters between buffers,即:在緩存之間拷貝字元。也就是說,該函數用來拷貝src所指的記憶體内容前count個位元組到dest所指的記憶體位址上。

       (3)應用舉例

*檔案名稱:memcpy.c

*内容摘要:用于測試memcpy函數

    INT8 szCopyStr[100] = "BBBBBBBBBB";

    memcpy(szTestStr+1, szCopyStr+5, 3);     //調用memcpy函數

   return 0;

讓你提前認識軟體開發(8):memset()與memcpy()函數

       (4)重要說明

       src和dest所指記憶體區域不能重疊,函數傳回指向dest的指針。

繼續閱讀