大佬教程收集整理的这篇文章主要介绍了C标准库-数值字符串转换与内存分配函数,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
原文链接:http://www.orlion.ga/977/
#include <stdlib.h> int atoi(const char *nptr); double atof(const char *nptr); 返回值:转换结果
atoi把一个字符串开头可以识别成十进制整数的部分转换成int型,例如Atoi(" -123abc")返回-123(字符串开头可以有空格)。如果字符串开头没有可识别的整数返回0,而Atoi("0abc")也返回0。(atoi("abc123")返回0)atof把一个字符串开头可以识别成浮点数的部分转换成double型,如:atof("31.4 ")返回31.4。atoi与atof都不能检查出错的情况。
#include <stdlib.h> long int strtol(const char *nptr, char **endptr, int basE); double strtod(const char *nptr, char **endptr); 返回值:转换结果,出错时设置errno
strtol是atoi的增强版,主要体现在这几方面:
(1) 不仅可以识别十进制整数,还可以识别其它进制的整数,取决于base参数,比如strtol("0XDEADbeE~~",NULL,16)返回0xdeadbee的值,strtol("0777~~",8)返回0777的值。
(2)endptr是一个传出参数,函数返回时指向后面未被识别的第一个字符。例如char *pos;strtol("123abc",&pos,10);,strtol返回123,pos指向字符串中的字母a。如果字符串开头没有可识别的整数,例如char *pos; strtol("ABCabc",10);,则strtol返回0,pos指向字符串开头,可以据此判断这种出错的情况,而这是atoi处理不了的。
(3)如果字符串中的整数值超出long int的表示范围(上溢或下溢),则strtol返回它所能表示的最大(或最小)整数,并设置errno为ERANGE,例如strtol("0XDEADbeef~~",16)返回0x7fffffff并设置errno为ERANGE。
除了使用malloc()可以在堆分配内存外还有其他函数可以:
#include <stdlib.h> void *calloc(size_t nmemb, size_t sizE); void *realloc(void *ptr, size_t sizE); 返回值:成功返回所分配内存空间的首地址,出错返回NULL
calloc的参数很像fread/fwrite的参数,分配nmemb个元素的内存空间,每个元素占size字节,并且calloc负责把这块内存空间用字节0填充,而malloc并不负责把分配的内存空间清零。
有时候用malloc或calloc分配的内存空间使用了一段时间之后需要改变它的大小,一种办法是@L_513_13@malloc分配一块新的内存空间,把原内存空间中的数据拷到新的内存空间,然后调用free释放原内存空间。使用realloc函数简化了这些步骤,把原内存空间的指针ptr传给realloc,通过参数size指定新的大小(字节数),realloc返回新内存空间的首地址,并释放原内存空间。新内存空间中的数据尽量和原来保持一致,如果size比原来小,则前size个字节不变,后面的数据被截断,如果size比原来大,则原来的数据全部保留,后面长出来的一块内存空间未初始化(realloc不负责清零)。注意,参数ptr要么是NULL,要么必须是先前@L_513_13@malloc、calloc或realloc返回的指针,不能把任意指针传给realloc要求重新分配内存空间。作为两个特例,如果调用realloc(NULL,sizE),则相当于@L_513_13@malloc(sizE),如果调用realloc(ptr,0),ptr不是NULL,则相当于调用free(ptr)。
#include <alloca.h> void *alloca(size_t sizE); 返回值:返回所分配内存空间的首地址,如果size太大导致栈空间耗尽,结果是未定义的
参数size是请求分配的字节数,alloca函数不是在堆上分配空间,而是在调用者函数的栈帧上分配空间,类似于C99的变长数组,当调用者函数返回时自动释放栈帧,所以不需要free。这个函数不属于C标准库,而是在POSIX标准中定义的。
以上是大佬教程为你收集整理的C标准库-数值字符串转换与内存分配函数全部内容,希望文章能够帮你解决C标准库-数值字符串转换与内存分配函数所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。