第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)应用举例

/***************************************************************
*版权所有 (C)2014, Zhou Zhaoxiong。
*
*文件名称:memcpy.c
*内容摘要:用于测试memcpy函数
*其它说明:无
*当前版本: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";
INT8 szCopyStr[100] = "BBBBBBBBBB";

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

memcpy(szTestStr+1, szCopyStr+5, 3); //调用memcpy函数

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

return 0;
}

 

       该程序的输出结果为:

让你提前认识软件开发(8):memset()与memcpy()函数_版本号_02

 

       (4)重要说明

       src和dest所指内存区域不能重叠,函数返回指向dest的指针




(欢迎访问南邮BBS:​​http://bbs.njupt.edu.cn/​​​)
(欢迎访问重邮BBS:​​​http://bbs.cqupt.edu.cn/nForum/index​​)

(本系列文章每周更新两篇,敬请期待!本人新浪微博:​​http://weibo.com/zhouzxi?topnav=1&wvr=5​​,欢迎关注!)