第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)应用举例
/***************************************************************
*版权所有 (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;
}
该程序的输出结果为:
(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,微信号:245924426,欢迎关注!)