挖掘一下C语言中的多维数组
好久没有看技术类的书籍了,今晚恰看到以前不知什么时候下到的一本oreilly的叫’mastering algorithms with c’的书,从书名可以看出这是一本讲算法的书,不过由于是选用了C语言作为讲解语言,所以难免不说说C语言。其中看到一节讲指针和数组,恰好碰到书中说: a[i][j] <=> *(*(a+i) + j),这个等价式看起来显而易见,但是还是有些东西值得挖掘一下的。 ...
好久没有看技术类的书籍了,今晚恰看到以前不知什么时候下到的一本oreilly的叫’mastering algorithms with c’的书,从书名可以看出这是一本讲算法的书,不过由于是选用了C语言作为讲解语言,所以难免不说说C语言。其中看到一节讲指针和数组,恰好碰到书中说: a[i][j] <=> *(*(a+i) + j),这个等价式看起来显而易见,但是还是有些东西值得挖掘一下的。 ...
最近自己曾经辛苦耕耘过的两个项目同时上线,相关问题也就逐渐暴露出来。工作这两年多时间以后,使我有这样感觉:’测试永远都是不完备的’,有些问题只能在商用过程中发现,呵呵,明确一点啊我不是搞测试的:) ...
在近期的一次工作交接中,在我的代码中发现了很多’安全隐患’,主要是以’字符串拷贝’为主。这种安全漏洞在C编程中是较为常见的,防范起来也较为容易,这里我们就来一起探索一下’字符串拷贝’的’密码’。 ...
这也是在ChinaUnix上看了几篇关于C语言’位域(Bit Fields)‘的帖子之后,才想写下这篇文章的。其实在平时的工作中很少使用到’位域’,我是搞服务器端程序设计的,大容量的内存可以让我毫不犹豫的任意’挥霍’^_^。想必搞嵌入式编程的朋友们对位域的使用应该不陌生吧。这里我也仅仅是凭着对C语言钻研的兴趣来学习一下’位域’的相关知识的,可能有些说法没有实践,缺乏说服力。 ...
下午到ChinaUnix C/C++版看了看,发现一个比较有意思的问题,一位兄弟在其帖子中问一段很简单的程序明显有数组越界访问之错误,可程序为什么运行起来却’安然无恙’,我看看了看,也给出了我自己的回复,晚上下班后又想想了这个问题,决定写一篇blog说说。 这位仁兄的程序(据他个人说来源自’GNU/Linux编程指南’)是这样的: ...
上午我们的一个实施组从现网发回来一封邮件,接到这种邮件一般都是报告问题的,果然不出所料,现场出现一个core,经过分析这是个由于线程函数参数存储位置不当造成的,从中我们可以总结出一些经验,以避免以后再犯。 ...
我们知道父进程在子进程被fork出来之前打开的文件描述符是能被子进程继承下来的,但是一旦子进程已经创建后,父进程打开的文件描述符要怎样才能传递给子进程呢?Unix提供相应的技术来满足这一需求,这就是同一台主机上进程间的文件描述符传递,很美妙而且强大的技术。 ...
又是老生常谈-‘单元测试’,说实话自己在单元测试上是’语言上的巨人,行动上的矮子’,属于那种说的比做的多的人^_^。不过也不能说什么也没做。记得去年年末的时候自己还设计并实现过一个简单的’C语言单元测试包‘呢^_^,至今这个包仍然还在使用呢。不过大多数的单元测试都不像想象中那样简单,我们在介绍单元测试的时候,大多拿Add、Sub等作例子,这样当然有好处,简单易懂。其实学习单元测试初期关键是学习单元测试的思想,所以这些Add、Sub也能满足需求。不过在真正的项目中,单元测试大多做起来较为困难,我是在Unix上做C开发的,Java的咱暂先不提,也没什么资格提,虽然曾经花过一段时间专心研究过,还写过些Java学习心得,但是毕竟没做过实际的项目,说起来心里也发虚。 ...
俗话说:“工欲善其事,必先利其器”。在Unix/Linux上做开发,这里的’器’也同样包括Unix Shell Script,遗憾亚,虽然自己在Unix上开发已经快2年了,但是对Unix Shell Script可以说是’Script盲’一个,很多稍微复杂些的Script自己根本都看不懂。其实这也是自己栽下的’苦果’,因为以前我一直’歧视’Script language,认为那不是真正程序员该精通的,所以也就没有认真钻研过。目前认识到了解一定的Script技术,可以很大程度提高自己的工作效率,有些小工具用Script实现方便极了。这里’扫盲’一是给自己’扫盲’,二是把这些基础的Script技术和那些对和我一样对Script不熟悉的人一起分享。这篇中的所涉及的Shell语法均为符合POSIX标准的语法,可能很多Shell不能与该语法完全相吻合。自己感觉Bash与POSIX Shell语法最为接近。 ...
就在昨天,就在我们的项目要结项的时候,一个影响力不亚于’广岛原子弹’的bug出炉了,蒙蔽我近一个月的问题终于被澄清了,不过为时已晚,项目即将上线,如果想彻底地解决这个问题,需要对整个系统的实现架构作调整,目前能做的只是’亡羊补牢’了。 ...