首页 > 编程知识 正文

strtoul函数的用法,公司和个人合作协议

时间:2023-05-05 05:53:13 阅读:262018 作者:3598

最近在使用strtoul时,碰到了一个让我没有想到的问题。
费了很大的功夫,最后才发现是这个小小的errno的问题。
吃一堑,长一智,特此写出来和大家分享一下。

废话不多说,下面开始干货。

strtoul (将字符串转化成无符号长整型)

表头文件

#include<stdlib.h>

定义函数

unsigned long strtoul(const char *nptr,char **endptr,int base);

主要功能
strtoul()会将参数nptr字符串根据参数base来转换成无符号的长整型数。参数base范围从2至36,或0。参数base代表采用的进制方式,如base值为10则采用10进制,若base值为16则采用16进制数等。

返回值
返回转换后的长整型数,否则返回ERANGE并将错误代码存入errno中。

附加说明
ERANGE指定的转换字符串超出合法范围。

所以一般使用strtoul时,为了判断字符串是否转换成功,会根据errno的返回值进行判断。

例:

str_tmp = strtoul(str, &tmp, 10); if ((errno != 0) || (strlen(tmp) != 0)) { break;}

那么问题来了,这个errno使用之前是否应该初始化一下?

^_^

我这次碰到的问题就是没有初始化,因为errno是一个全局变量,所以在你使用之前可能别的代码已经发生过错误从而改变了它的值,导致你的程序走到这里会发生错误。(这就是最悲催的,明明不是你的问题,却显示你的程序出现了问题。)

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。