- 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指针所指的空间。