C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了C标准库-数值字符串转换与内存分配函数大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

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

@H_489_3@一、数值字符串转换函数

#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。

 

@H_489_3@二、内存分配函数

    除了使用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,请注明来意。
标签: