• strlen() 和sizeof()的区别

    1. sizeof()是操作符,可以计算任意类型的大小(包括函数类型)。

        2.strlen()是函数, 需要引入头文件<string.h>,只能计算char* 类型以 '\0' 结束的字符串的大小。

        3. 数组做sizeof()的参数不退化 , 但是传递给strlen() 就退化为指针。

        4. strlen的结果要在运行的时候才能计算出来,时用来计算字符串的长度,不是类型占内存的大小。

        5. sizeof后如果是类型必须加括弧,如果是变量名可以不加括弧。这是因为sizeof是个操作符不是个函数。

  •   memset()  memcpy()   memcmp()   memmove(),memchr()实现 内存覆盖问题

    1. memcpy()

            函数原型:void *memcpy( void *dest, void const *src,  size_t length );

            它的功能是从src的起始位置复制length个字节到dest中;

            它可以复制任何类型的值;

            dest,src内存有重叠,则结果不可预计。

        2 .memmove()

             函数原型:void *memmove( void *dest, void const *src,  size_t length );

            与memcpy类似,只是他们的dest,src内存可以有重叠。因为在实现时是先将src中的内容复制到一个临时位置。因此其速度比memcpy要慢一些。

        3.memcmp() 

            函数原型:int memcmp( void const *a, void const *b,  size_t length );

            函数功能是比较两段内存,比较的长度为length字节。函数的返回类型和strcmp一样;

            比较是按无符号的字节进行比较的。

        4.memset()  

            函数原型:void *memset( void *a, int ch, size_t length );

            函数功能即从内存a的首地址开始共length字节设置成字符ch。

        5.memchr()    

            函数原型:void *memchr( void const *a,  int ch,  size_t length );     

            函数功能是从a的起始位置开始查找字符ch第一次出现的位置,并返回一个指向该位置的指针,它

共查找length个字节,如果在这个范围内没找到,就返回NULL。 

  • atoi()  atol   atof ()实现

       头文件 #include<stdlib.h>

        1. atoi函数(将字符串转换成整型数)

                定义函数: int atoi(const  char *  ptr);

                函数说明:atoi()会扫描参数ptr字符串,跳过前面的空格字符,直到遇上数字或正负符号才开始

做转换,而再遇到非数字或字符串结束时('\0')才结束转换,并将结果返回

        2.  itoa函数(把一整数转换为字符串 )

                 定义函数:char* itoa(int value,char*string,int radix);

                函数说明:int value 被转换的整数,char *string 转换后储存的字符数组,int radix 转换进制

数,如2,8,10,16 进制等。

                注意,atoi是标准库函数,itoa不是,用到itoa的时候可以用sprintf()a函数代替。

        3. atof函数 (把字符串转换成浮点类型)

                   定义函数:double atof(const char* ptr);

                   函数说明:atof()会扫描参数ptr字符串,跳过前面的空格字符,直到遇上数字或正负符号才开

始做转换,而再遇到非数字或字符串结束时('\0')才结束转换。参数ptr字符串可包含正负号、小数点E(e)

来表示指数部分,如123.456或123e-2。返回值 返回转换后的浮点型数。

        4 . atol(将字符串转换成长整型数)

                   定义函数:long atol(const char* ptr);

                   函数说明:atol()会扫描参数ptr字符串,跳过前面的空格字符,直到遇上数字或正负符号才开

始做转换,而再遇到非数字或字符串结束时('\0')才结束转换,并将结果返回。

        5. gcvt(将浮点型数转换为字符串,取四舍五入)

                   定义函数:char *gcvt(double number,size_tndigits,char *buf);

                   函数说明:gcvt()用来将参数number转换成ASCII码字符串,参数ndigits表示显示 的位数。

gcvt()与ecvt()和fcvt()不同的地方在于,gcvt()所转换后的字符串包含小数点或正负符号。若转换成功,转

换后的字符串会放 在参数buf指针所指的空间。