第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;
}
該程式的輸出結果為:
(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;
(4)重要說明
src和dest所指記憶體區域不能重疊,函數傳回指向dest的指針。