软件项目实践中的C语言一瞥
文章平均质量分 66
知识的港湾
高级软件开发工程师
展开
-
我的视频课程,欢迎大家关注学习!
我的视频课程介绍。原创 2017-02-10 20:13:10 · 1977 阅读 · 2 评论 -
Linux下获取代码文件名、代码所在行数及日期时间的C程序实现
一、概述 在实际的软件开发项目中,为了方便排查程序问题,要求在日志文件中输出日志信息所在的程序文件名及日志代码所在的行数。此外,某些软件还会要求将程序启动时的日期时间输出到日志文件中,方便跟踪软件运行状况。 本文介绍了Linux下获取代码文件名、代码行数及日期时间的C代码实现。二、几个标准预定义宏简介 在C语言中,使用几个标准预定义宏,便可轻松实现获取代码文件名、代码行数及日期时间的功能。原创 2015-05-14 09:11:57 · 4464 阅读 · 0 评论 -
分批读取文件中数据的程序流程及其C代码实现
一、概述 在实际的软件开发项目中,经常需要处理大量的文件。某些文件中包含了相当多的数据记录数,如作者本人参与过的项目中,一个文件中有好几十万条记录。如果一次性将多条记录读入,则会花费大量的处理时间,且占用大量的内存。 为此,要求对于包含大量数据记录的文件进行分批读取操作,即每一轮读取一定数目的数据记录,待将这些记录处理完成之后,再读取下一批数据。本文介绍分批读取文件中数据的程序流程,并给出了C程原创 2015-05-29 14:53:51 · 6766 阅读 · 2 评论 -
Linux下时间范围判断的程序流程及其C代码实现
一、概述 在实际的软件开发项目中,经常会遇到需要判断时间范围的情况。例如,某软件要在某段时间内执行对过期数据的清理,在其它时间段不执行。为了体现程序的灵活性,一般都是在配置文件中设置时间段的始末值,这样可根据软件的实际安装环境进行配置。本文介绍判断当前时间是否在配置的时间范围内的程序流程,并给出了C代码实现。具体的需求描述如下: 在配置文件中按需配置某一开始时间和结束时间,编写程序判断当前系统时原创 2015-06-17 15:43:14 · 5039 阅读 · 6 评论 -
程序休眠问题的C代码实现
问题描述编写代码用于实现程序的休眠,例如,如果要求程序休眠10秒钟,那么在这10秒内程序要一直等待,而不执行任何操作。 解决思路在Linux下,有一个select函数用于实现进程的阻塞,该函数的原型是:int select(int n, fd_set *readfds,fd_set *writefds, fd_set *exceptfds, struct timeval *timeout);可以用原创 2015-04-30 13:56:23 · 6181 阅读 · 6 评论 -
让你提前认识软件开发(22):shell脚本中的文件操作
第1部分 重新认识C语言shell脚本中的文件操作 【文章摘要】 编写shell脚本时,经常会涉及到对文件的操作,比如从文件中读取一行数据、向文件追加一行数据等。完成文件读写操作的方法有很多,了解各种命令下文件操作的执行情况,有助于开发人员在不同使用场景下选择合适的命令。 本文以实际的shell脚本为例,介绍了对文件进行操作的不同方法,为相关开发工作提供了参考。【关键词】原创 2014-05-17 20:49:42 · 3390 阅读 · 0 评论 -
让你提前认识软件开发(6):程序的版式和注释
在《高质量程序设计指南(C/C++语言)》中,作者说:可以把程序的版式比喻为“书法”,好的“书法”可以让人对程序一目了然,看得兴致勃勃。确实,我们一打开程序,首先看到的便是程序的排版,我们的第一印象便是程序写得是工整还是凌乱。都说第一印象很重要,为了给大家留下好的第一印象,我们一定要注重程序的版式。 此外,好的注释能够帮助读者更快地理解程序,提高工作的效率。也许是因为工作比较忙的原创 2014-03-23 09:15:19 · 4814 阅读 · 5 评论 -
让你提前认识软件开发(3):学校C语言教材的缺陷
第1部分 重新认识C语言学校C语言教材的缺陷 我在走出校门的时候非常的“轻狂”,认为自己在学校里面已经学得够多了,工作就只算是小菜一碟。但在工作中屡次碰壁之后,我才发现自己当时的想法是多么的天真。我们踏上工作岗位,一切几乎都要从零开始。 对于大家“非常熟悉”的C语言来说,我们在学校里面学的非但不够用,而且在很多地方对大家还有“误导”的作用,让我们认为编原创 2014-03-08 17:01:33 · 4461 阅读 · 1 评论 -
水仙花数&素数&质因数分解的C语言实现
最近,我翻了一下之前的C语言教材,看了三个有意思的小程序,包括:寻找“水仙花数”、判断某数是否为素数、对一个数进行质因数分解。我想把这三个东西放到一个程序中,便写下了此文。 算法步骤1. 寻找“水仙花数”。“水仙花数”是指一个三位数,其各位数字的立方和等于该数本身。例如:153是一个“水仙花数”,因为153=1的三次方+5的三次方+3的三次方。 2. 判断某数是否为素数。素数是指只能被1和它本身整原创 2015-04-27 18:49:34 · 3284 阅读 · 6 评论 -
程序中对密码进行加解密的C代码示例
问题的提出在实际的软件项目中,经常涉及到对密码的处理,如用户登录密码、数据库密码、FTP密码等。为了增加软件的灵活性,一般都要求将这些密码放到一个配置文件中。但密码原文容易记录,若被软件入侵者获取,则后果不堪设想。因此我们不能直接将密码原文填入配置文件中,而要先对密码进行加密,然后将加密之后的密文填入配置文件,等程序读取配置之后再进行解密处理。整个流程如图1所示。图1 加解密总体流程 示例程序流程原创 2015-04-14 18:46:40 · 4436 阅读 · 2 评论 -
让你提前认识软件开发(19):C语言中的协议及单元测试示例
第1部分 重新认识C语言C语言中的协议及单元测试示例 【文章摘要】 在实际的软件开发项目中,经常要实现多个模块之间的通信,这就需要大家约定好相互之间的通信协议,各自按照协议来收发和解析消息。 本文以实际的程序代码为例,详细介绍了如何用C语言来实现通信协议,并基于对协议字段的判断,说明了程序单元测试的过程,为相关的开发工作提供了有益的参考。【关键词】 软件开发原创 2014-05-07 20:18:16 · 3534 阅读 · 0 评论 -
让你提前认识软件开发(14):程序中的算法
第1部分 重新认识C语言程序中的算法 【文章摘要】 算法(Algorithm),是程序的灵魂。著名计算机科学家、图灵奖获得者沃思曾提出过一个公式:数据结构+算法=程序。可见,算法在程序中占有非常重要的地位。 在实际的软件开发项目中,不管是有意设计或是无意为之,我们几乎随时在和算法打交道。小到定义一个变量,大到编写一个函数,这些都是算法的实现过程。原创 2014-04-20 23:28:04 · 6907 阅读 · 0 评论 -
让你提前认识软件开发(17):makefile文件的书写及应用
第1部分 重新认识C语言makefile文件的书写及应用 【文章摘要】 makefile用于Linux下整个工程的编译,对于Linux下的C/C++语言的编译是至关重要的。 本文以实际的C源程序为例子,介绍如何使用makefile来编译Linux下的C语言工程,为相关开发工作的开展提供了参考。 【关键词】 makefile C语言 Linux 编译原创 2014-04-30 20:47:17 · 2740 阅读 · 2 评论 -
判断输入年份是否为闰年的另一种方法
最近,我在网上看到了一道题目:输入一个从1901年开始到今年截止的年份,判断该年份是否为闰年?对于这个题目,大家应该不会陌生,很多人在学校就应该已经见过了。通常的做法是判断输入的年份是否满足下列两个条件之一:1) 能够被4整除但不能被100整除。2) 能够被400整除。如果满足两个条件中的任意一个,那么该年份就为闰年。程序流程如下图所示: 程序代码如下:/*********************原创 2015-04-23 19:26:31 · 7473 阅读 · 1 评论 -
C语言中结构体变量之间赋值
最近,我阅读了某新员工小刘写的C语言代码,发现其对结构体变量之间的赋值不是很熟悉。对于两个相同类型的结构体变量,他均采用的是逐个成员变量直接赋值的形式。如下的代码示例:/*********************************************************************** 版权所有 (C)2015, Zhou Zhaoxiong。** 文件名称:原创 2015-03-31 18:41:33 · 19677 阅读 · 6 评论 -
生成随机密码的C代码实现
问题描述 某些软件在登录的时候,经常会要求用户输入一个系统发过来的随机密码(或称校验码),用于对用户的身份进行校验,防止恶意登录。 要求用C语言生成一组长度为6位的随机密码串。 rand函数简介 rand函数是真正的随机数生成器,它会返回一个范围在0到RAND_MAX(2147483647)之间随机数值。 该函数的原型为:in原创 2015-03-21 14:12:37 · 5614 阅读 · 0 评论 -
修改文件后缀的C语言实现
在实际的软件开发项目中,大家也许会遇到修改文件的后缀的需求(例如,将doc格式修改为docx格式)。本文提供了修改文件后缀的C语言实现,并演示了修改文件后缀的过程。 1. C程序实现 2. 修改后缀的过程 step 1: 在本地的D盘中,有一个叫做“Test”的文件夹,该文件夹下有一个命名为“123.doc”的文件,如下图所示:原创 2015-03-20 14:58:07 · 9027 阅读 · 0 评论 -
轮询算法设计及其代码框架
在实际的软件开发项目中,经常会遇到某模块需要向其它模块发消息的情况。为了减轻消息接收者的负担,我们会采用一种叫做轮询的机制来发送消息。本文介绍轮询算法的流程及其代码框架。1.算法流程 假设消息发送模块为模块A,消息接收模块为模块B。模块A安装了一个,模块B安装了N个。所有模块都同时启动。 算法流程如图1所示: 图1 轮询算法流程2.代码框架static int g_iSendIdx = 0原创 2015-06-01 09:03:15 · 6324 阅读 · 5 评论 -
Linux下获取当前时间到1970年之前某年份的秒数的C代码实现
一、问题描述 在Linux下编写一C程序,用于获取当前时间到1970年之前某年份的秒数。二、C代码实现/********************************************************************** 版权所有 (C)2015, Zhou Zhaoxiong。** 文件名称:GetSecNumBetweenTwoYear.c* 文件标识:无*原创 2015-05-19 18:42:38 · 8625 阅读 · 0 评论 -
Linux下程序启动之后的初始化---检查配置文件及读取日志配置项的值
在程序进行具体的操作之前,一些初始化操作是必不可少的。本文中的示例只是涉及到检查配置文件和读取日志配置项两个操作,在实际的应用中可能还会有初始化数据库参数、建立与其他模块的通信链路等操作,这要视不同的程序而定。原创 2016-12-13 22:33:43 · 2999 阅读 · 0 评论 -
Linux下文件移动问题的排查及解决(以C代码为例)
Linux下文件移动问题的排查及解决(以C代码为例)原创 2016-08-25 21:51:36 · 3052 阅读 · 0 评论 -
软件开发实践中的入队列和出队列操作的C代码示例
本文用实际的C代码示例了简单的数据入队列和出队列的方法,大家可据此了解队列的实际用法,也可参照来实现更加复杂的队列操作。原创 2016-08-11 21:17:03 · 7439 阅读 · 2 评论 -
限制程序中某类操作的执行次数的算法设计及C代码实现
编写程序实现限制程序中某类操作的执行次数的需求。为了便于说明,要求程序每天创建一个与上一天不同的文件目录。如果欲创建的文件目录已存在,则不用再创建。文件目录的命名格式为:FileDir_YYYYMMDD,如:FileDir_20160830原创 2016-08-31 20:40:32 · 3900 阅读 · 0 评论 -
结构体中指针赋值问题的分析及C代码示例
本文对结构体中指针赋值问题进行了分析,并用C代码演示了指针的赋值方法。原创 2016-07-12 22:02:13 · 20028 阅读 · 2 评论 -
软件开发中的自测及C代码示例
在软件开发中,程序自测是一个永远都绕不开的话题。很多开发人员以写出有难度的代码为荣,但却不重视对自己编写的代码进行测试,这导致了最终到达客户手中的产品质量不高,bug频发,损害了公司的形象。对于一个开发人员来说,我们应该将开发和自测置于同等重要的地位,我们花在自测上的时间要不比开发少。能否对自己编写的代码进行充分的自测也是检验一个开发人员水平高低的标准之一。原创 2016-06-30 21:53:06 · 5559 阅读 · 0 评论 -
写文件头的算法流程及C代码实现
一、问题描述 将多条记录写入文件中,每条记录占一行。每写入一条记录,要计算当前文件中所有记录的大小(精确到字节)和记录条数,并写到文件的第一行(即文件头)。为了便于区分,文件记录的大小和文件中记录条数各占10个字节,左对齐,不足的位补以空格。 二、算法流程三、C代码实现/**********************************************************原创 2015-04-09 14:11:51 · 2445 阅读 · 1 评论 -
Linux下控制(统计)文件的生成的C代码实现
不定时地在Linux机器下的某目录中放入文件,文件内容中包含了用户号码、起止时间等字段,现编写一程序来统计目前该目录中所有文件中的记录总条数及所有记录中的最早起始时间和最晚结束时间。原创 2016-01-09 13:44:59 · 2206 阅读 · 2 评论 -
去除源文件中的重复行的程序流程及其C代码实现
在有关话单生成及处理的程序中,对源话单文件进行去重操作是大家必须考虑的问题。本文中的程序为相关项目的开发人员提供了参考。原创 2015-12-10 11:25:05 · 4311 阅读 · 2 评论 -
C语言多线程中变量累加问题的分析
本文对C语言多线程中变量累加问题进行了分析。原创 2015-11-21 10:26:15 · 7659 阅读 · 2 评论 -
写文件时字段对齐和填充的C代码实现
在实际的软件开发项目中,经常会遇到需要转换某些文件中的字段格式的问题。例如,在生成的话单文件中,要求某些字段的长度固定,如果目前该字段的长度不足,则不足的位数用某些特殊的字符来填充(并可能会对填充的位置有要求)。之所以要求字段格式固定,是为了方便对文件的自动处理,因为很多软件是按照一定的规则对文件进行处理的。本文示例了对字段进行填充的方法。原创 2015-09-01 19:24:29 · 4778 阅读 · 5 评论 -
Linux下按照时间和大小生成新文件的程序流程及其C代码实现
文件操作在实际的软件开发项目中占有非常重要的地位,大家从我的很多博文中就可以看出来。对于一个合格的C程序员来说,大家一定要熟练掌握相关文件操作函数的用法。原创 2015-07-21 19:05:40 · 3544 阅读 · 0 评论 -
Windows下一个简单的日志系统的C代码实现
问题描述 实现一个简单的基于Windows的日志系统,要求写入日志文件的内容的样式如下: [时间]+[文件名]+[日志等级]+日志具体内容 如: [2015.02.2514:35:13.143][WriteLog.c][INFO]This is a test! 其中,“2015.02.25 14:35:13.143”为当前时间(精确到毫秒原创 2015-03-24 15:40:50 · 7379 阅读 · 0 评论 -
Linux下合并前缀相同的文件的程序流程及其C代码实现
一、概述 在实际的软件开发项目中,会出现对多个前缀(或后缀)相同的文件进行合并的需求。也就是说,将这些前缀(或后缀)相同的文件中的内容合并到一个文件中。这些文件的来源可能是前一流程中程序生成的文件,也可能是其他模块生成的文件。 例如,我们要将前缀相同(以“Test_”作为前缀)的Test_1.txt和Test_2.txt文件中的内容合并到ResultFile.txt文件中,如果Test_1.tx原创 2015-07-09 10:57:35 · 7025 阅读 · 6 评论 -
socket消息流程介绍及其C代码实现
在实际的软件开发工作中,经常会涉及到socket编程,也就是利用socket来完成消息的交互和命令的执行。本文通过一个C程序来讲解Linux下socket的整个消息执行流程。C程序示例/*********************************************************************** 版权所有 (C)2015, Zhou Zhaoxiong。** 文原创 2015-06-08 19:11:42 · 3894 阅读 · 0 评论 -
合并字符串中连续的多个空格的C代码实现
1.问题描述 将某一字符串中连续出现的多个空格合并为一个空格,如果合并之后的字符串的首尾有空格,则将其去掉。 例如,“ This is a string! ”是一个包含多个空格的字符串,要求其变成“This is a string!”的形式。2.C代码实现/********************************************************************原创 2015-05-23 10:53:59 · 5585 阅读 · 2 评论 -
寻找满足后缀要求的第一个文件名及其类型的C程序实现
问题描述有多个带后缀的用分号分隔的文件名(形如:1.xml;2.pdf;3.jpg;4.txt),编写C程序用于将满足后缀要求的第一个文件名找出来,并显示文件的类型。规定的后缀及文件类型对应如下:语音:类型1,后缀wav;视频:类型2,后缀3gp;传真:类型3,后缀tif;图片:类型4,后缀jpg;文本:类型5,后缀txt。 对于“1.xml;2.pdf;3.jpg;4.txt”,程序需输出文件名原创 2014-11-06 18:40:06 · 1939 阅读 · 0 评论 -
让你提前认识软件开发(13):指针及结构体的使用
第1部分 重新认识C语言指针及结构体的使用 【文章摘要】 指针在C语言中占有很重要的地位,同时也是学习C语言的难点所在。结构体属于用户自己建立的数据类型,在实际的软件开发项目中应用很广泛。 本文以实际的例子介绍了C语言中指针和结构体的使用方法,为进一步的学习和应用提供了有益的参考。【关键词】 C语言 指针 结构体 文件原创 2014-04-16 20:34:24 · 3207 阅读 · 0 评论 -
让你提前认识软件开发(15):程序调试的利器—日志
第1部分 重新认识C语言程序调试的利器—日志 如果世界上有一个人能够保证一次写出来的代码是百分之百正确的,那么毫无疑问,他一定是世界上最优秀的程序员,没有之一。为什么要求代码写好过后要进行充分的自测(包括单元测试和集成测试)?就因为是人皆会犯错,使程序就会有bug。作为一名软件开发人员,必须要学会对程序进行测试,也就是要学会程序的调试。 一般而言,对原创 2014-04-24 08:22:12 · 6695 阅读 · 4 评论 -
让你提前认识软件开发(8):memset()与memcpy()函数
第1部分 重新认识C语言memset()与memcpy()函数 软件项目中的代码,少则数千行,多则上万行,但并非无规律可循。阅读了那么多代码之后,我发现有两个函数出现的频率很高,那就是memset()与memcpy()函数,它们都是C语言编程中经常要用到的。工作之余,我查了一些资料,现对它们作一个简单的说明。 1. memset()函数原创 2014-03-29 10:41:08 · 3405 阅读 · 8 评论 -
让你提前认识软件开发(7):变量及函数的命名
第1部分 重新认识C语言变量及函数的命名 最近看了一则笑话,大意是路人甲到电信营业厅去交电话费,给营业员说要充50块钱,那个营业员问了一句“How much?”。路人甲心想现在社会真的与以往不同了,连一般的营业员都开始流行讲英语了,于是便以不是很流利的口语说了一句“Fifty YUAN”。那个营业员一头雾水地看着他,说道“电话号码多少?”路人甲这才恍然大悟,原来是原创 2014-03-26 20:23:08 · 3287 阅读 · 6 评论