C标准库-数值字符串转换与内存分配函数

C标准库-数值字符串转换与内存分配函数,第1张

概述原文链接:http://www.orlion.ga/977/ 一、数值字符串转换函数 atoi把一个字符串开头可以识别成十进制整数的部分转换成int型,例如atoi(" -123abc&qu

原文链接:http://www.orlion.ga/977/@H_502_1@

@H_404_3@一、数值字符串转换函数@H_502_1@

#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都不能检查出错的情况。@H_502_1@

#include <stdlib.h>long int strtol(const char *nptr, char **endptr, int base);double strtod(const char *nptr, char **endptr);返回值:转换结果,出错时设置errno

    strtol是atoi的增强版,主要体现在这几方面:@H_502_1@

    (1) 不仅可以识别十进制整数,还可以识别其它进制的整数,取决于base参数,比如strtol("0XDEADbeE~~",NulL,16)返回0xdeadbee的值,strtol("0777~~",8)返回0777的值。@H_502_1@

    (2)endptr是一个传出参数,函数返回时指向后面未被识别的第一个字符。例如char *pos;strtol("123abc",&pos,10);,strtol返回123,pos指向字符串中的字母a。如果字符串开头没有可识别的整数,例如char *pos; strtol("ABCabc",10);,则strtol返回0,pos指向字符串开头,可以据此判断这种出错的情况,而这是atoi处理不了的。@H_502_1@

    (3)如果字符串中的整数值超出long int的表示范围(上溢或下溢),则strtol返回它所能表示的最大(或最小)整数,并设置errno为ERANGE,例如strtol("0XDEADbeef~~",16)返回0x7fffffff并设置errno为ERANGE。@H_502_1@

 @H_502_1@

@H_404_3@二、内存分配函数@H_502_1@

    除了使用malloc()可以在堆分配内存外还有其他函数可以:@H_502_1@

#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并不负责把分配的内存空间清零。@H_502_1@

    有时候用malloc或calloc分配的内存空间使用了一段时间之后需要改变它的大小,一种办法是调用malloc分配一块新的内存空间,把原内存空间中的数据拷到新的内存空间,然后调用free释放原内存空间。使用realloc函数简化了这些步骤,把原内存空间的指针ptr传给realloc,通过参数size指定新的大小(字节数),realloc返回新内存空间的首地址,并释放原内存空间。新内存空间中的数据尽量和原来保持一致,如果size比原来小,则前size个字节不变,后面的数据被截断,如果size比原来大,则原来的数据全部保留,后面长出来的一块内存空间未初始化(realloc不负责清零)。注意,参数ptr要么是NulL,要么必须是先前调用malloc、calloc或realloc返回的指针,不能把任意指针传给realloc要求重新分配内存空间。作为两个特例,如果调用realloc(NulL,size),则相当于调用malloc(size),如果调用realloc(ptr,0),ptr不是NulL,则相当于调用free(ptr)。@H_502_1@

#include <alloca.h>voID *alloca(size_t size);返回值:返回所分配内存空间的首地址,如果size太大导致栈空间耗尽,结果是未定义的

    参数size是请求分配的字节数,alloca函数不是在堆上分配空间,而是在调用者函数的栈帧上分配空间,类似于C99的变长数组,当调用者函数返回时自动释放栈帧,所以不需要free。这个函数不属于C标准库,而是在POSIX标准中定义的。@H_502_1@

 @H_502_1@ 总结

以上是内存溢出为你收集整理的C标准库-数值字符串转换与内存分配函数全部内容,希望文章能够帮你解决C标准库-数值字符串转换与内存分配函数所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1209767.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-04
下一篇 2022-06-04

发表评论

登录后才能评论

评论列表(0条)

保存