让你提前认识软件开发(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;

}

       该程序的输出结果为:

 

       (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,欢迎关注!)

时间: 2024-09-20 16:08:03

让你提前认识软件开发(8):memset()与memcpy()函数的相关文章

提前认识软件开发(8) memset()与memcpy()函数

软件项目中的代码,少则数千行,多则上万行,但并非无规律可循.阅读了那么多代码之后,我发现有两个函数出现的频率很高,那就是memset()与memcpy()函数,它们都是C语言编程中经常要用到的.工作之余,我查了一些资料,现对它们作一个简单的说明. 1. memset()函数 (1)函数原型 void *memset( void *dest, int c, size_t count ). (2)函数作用 在MSDN中,将该函数的作用描述为:Sets buffers to a specified c

让你提前认识软件开发(10):字符串处理函数及异常保护

第1部分 重新认识C语言 字符串处理函数及异常保护           在软件开发项目中,经常有程序要对字符串进行操作.为此,C函数库中提供了一些用来对字符串进行处理的函数,使用起来非常的方便.但由于字符串都有长度,如果随意对不同的字符串进行连接和拷贝等操作,就可能出现意想不到的后果.        因此,在实际开发过程中,十分强调对字符串处理函数进行异常保护.本文详细介绍如何正确运用字符串处理函数进行C程序设计.          1. strcat和strncat函数         str

让你提前认识软件开发(7):变量及函数的命名

第1部分 重新认识C语言 变量及函数的命名            最近看了一则笑话,大意是路人甲到电信营业厅去交电话费,给营业员说要充50块钱,那个营业员问了一句"How much?".路人甲心想现在社会真的与以往不同了,连一般的营业员都开始流行讲英语了,于是便以不是很流利的口语说了一句"Fifty YUAN".那个营业员一头雾水地看着他,说道"电话号码多少?"路人甲这才恍然大悟,原来是问我电话号码多少,而非多少钱.         也许这个笑话

提前认识软件开发(1) 序言

序言 正式踏上软件开发岗位已经将近两年了,经历了很多,也学到了很多."万事开头难",学生转变为职业人的过程,恰似茧化成蝶的过程. 1.为什么要写作本系列? 在工作的过程中,我发现我们在学校里面学到的很多东西片面肤浅,根本达不到岗位的要求.像编码规范.研发流程等等学校里几乎不提及的知识,在实际的软件开发项目中却恰恰是异常的重要. 在学校里面,我们欠缺的教育主要包括以下方面: 第一,对编码规范的要求.计算机编程课上,老师只要求学生能够编写程序实现既定的功能即可,几乎不会对编码规范提出要求,

让你提前认识软件开发(1):序言

序言           正式踏上软件开发岗位已经将近两年了,经历了很多,也学到了很多."万事开头难",学生转变为职业人的过程,恰似茧化成蝶的过程.          1.为什么要写作本系列?        在工作的过程中,我发现我们在学校里面学到的很多东西片面肤浅,根本达不到岗位的要求.像编码规范.研发流程等等学校里几乎不提及的知识,在实际的软件开发项目中却恰恰是异常的重要.        在学校里面,我们欠缺的教育主要包括以下方面:        第一,对编码规范的要求.计算机编程

提前认识软件开发(33) 数据操纵语言(DML)

数据操纵语言(Data Manipulation Language,DML)包括insert.delete和update语句,用于增.删.改数据. 本文用以下的表tb_employeeinfo作为例子加以说明: create table tb_employeeinfo ( employeeno varchar(20) not null, -- 员工工号 employeename varchar(20) not null, -- 员工姓名 employeeage int null -- 员工年龄

提前认识软件开发(16) 如何对程序进行优化

对程序进行优化,是软件开发工程师必然会涉及到的问题.那么为什么要对程序进行优化呢?原因有以下几个: 第一,在原程序基础之上新增.删除或修改了功能,需要改变原程序流程.客户需求随时可能会变化,今天已经实现的功能,说不定明天就要修改或去掉.落实到程序上面,就需要我们随时准备对写好的代码进行修改,而不要奢望写好之后就永远不要动了. 第二,原程序有bug.这类情况出现得非常的频繁,很多软件有1.0.2.0.3.0等版本,部分原因就是前面版本中程序有问题,在修改程序的过程中使得软件版本不断升级. 第三,原

让你提前认识软件开发(47):同行评审

第3部分 软件研发工作总结 同行评审            在<浪潮之巅>这本书中,吴军老师描述了在Google早期的工作方式,其中有一段是这么写的:我一般会在吃完晚饭后把代码修改的清单发给克雷格做代码审核,他一般晚上10点左右会回复我,给我修改意见,详细到某一行多了一个空格.         吴军老师所描述的内容,其实就是软件开发中的同行评审流程.         几乎在所有的软件项目中,都需要同行评审.一个人不管能力多强,看问题的角度总会受到限制,写出来的程序和文档等定不会是十全十美的.如

提前认识软件开发(2) 软件开发工程师常用的工具软件

有一次,我打开电视机准备随便看看,无意中被一部战争片吸引住了.成千上万的共产党战士搭起云梯,想攻破一座城池.但是城楼上面的敌人负隅顽抗,拼了命地阻击我军的进攻.双方的伤亡都很惨重,但城就是攻不下来.眼看我军剩下的人不多了,突然不知从什么地方开出一辆坦克,两炮就把城门轰开了.我军趁势攻入城中,将敌人全部歼灭了. 这类电视剧比较常见,相信大家看了不止一次.但是,我看完之后,那个场景还一直留在我的脑海里.成千上万的人不如一辆坦克来得直接,说明了什么问题呢?我立马想到了一句古诗:工欲善其事,必先利其器.