CRT字符串函数代码赏析

来源:互联网 发布:linux bz2压缩命令 编辑:程序博客网 时间:2024/04/29 02:23

      最近去了几家公司面试,面试之前各家公司都拿出了一套笔试题出来做。这几家公司的笔试题在C/C++部分都有一个特点是:题目中有大量对字符串相关函数的考查:如一家公司要求写出strcpy函数,一家要求写出itoa函数等。究其原因,我认为通过字符串函数能很好的考查面试者对C++的内存管理机制的理解以及面试者对指针操作的熟悉程度。内存管理和指针操作又是使用C++编写程序的基础,如果C/C++程序员在这两方面没有深刻的认识,其编写出来的程序自然很容易在运行时发生错误。

      C++字符串库函数中的某些函数比较简单,比如strcpy函数或者itoa函数等,一个学习C++语言的初学者只要看了数组和指针这两章,应该就能比较顺利的写出这类简单的字符串库函数。但通过看面试者写出来的这些函数的源代码,就能看出面试者还是不是一个C++语言的菜鸟。下面我就以strcpy函数为例,来看一看初学者和老手写的代码的差距。

      首先我们来看一个新手常常写出的strcpy函数

       

      该函数虽然能够很好的完成预定的功能,程序也足够的简单。但是这样的程序是肯定不能获得招聘者青睐的。因为程序遍历了pDest两次,这在效率上也确实是太浪费了。我们完全可以通过'/0'结束符来判断是否读到了pDest的结尾。修改后的strcpy函数版本如下所示。

       

       该函数虽然也算比较漂亮,但是我认为使用指针的话更能体现出面试着对C++语言指针部分的理解,所以让我们试着把它改成使用指针的形式。

        

       该函数的版本不够简洁,让我们试着把它改得简单一点。

        

       最后让我们把它改的更加的简单一点,这也是CRT库的源代码。

        

       如果是面试题的话,我更加倾向于大家在函数开始的地方加上断言,因为有些公司就是要通过这个检查了地址是否有效。

        

       最后我还想为大家贴上一个stroustrup使用C++写的itoa函数,我认为该程序不但写的高效简洁,而且程序在错误处理方面想的比较周到,其中对异常的使用方法很值得大家学习。

        

 

 

原创粉丝点击