跳转到内容

strtol : 字符串转长整型

#include <stdlib.h>
long strtol(const char *s, char **ptr,int base);
long _strtol_r(void *reent, const char *s, char **ptr,int base);
```### 描述
函数 strtol 将字符串 *s 转换为长整型。首先,它将字符串分解为三部分:前导空白字符(被忽略);由类似于 base 指定的基数中的整数组成的主体字符串;以及由零个或多个无法解析的字符组成的尾部部分,并且始终包含终止空字符。然后,它尝试将主体字符串转换为长整型并返回结果。
如果 base 的值为 0,则预期主体字符串看起来像普通的 C 整数常量:一个可选的符号,一个可能的表示十六进制基数的 `0x',以及一个数字。如果 base 在 2 到 36 之间,则主体的预期形式是表示 base 指定的基数中的整数的字母和数字序列,并带有可选的正号或负号。字母 a--z(或者等效地,A--Z)用于表示从 10 到 35 的值;只允许使用其赋值小于 base 的字母。如果 base 为 16,则允许前导 0x。
主体序列是输入字符串中从第一个非空白字符开始,具有预期形式的最长初始序列。如果字符串为空或完全由空白字符组成,或者如果第一个非空白字符不是允许的字母或数字,则主体字符串为空。
如果主体字符串是可接受的,并且 base 的值为零,strtol 会尝试从输入字符串中确定基数。带有前导 0x 的字符串被视为十六进制值;带有前导 0 且没有 x 的字符串被视为八进制;所有其他字符串都被视为十进制。如果 base 在 2 到 36 之间,则将其用作转换基数,如上所述。如果主体字符串以减号开头,则该值被取反。最后,指向转换后的主体字符串之后的第一个字符的指针被存储在 ptr 中(如果 ptr 不是 NULL)。
如果主体字符串为空(或形式不可接受),则不执行转换,并且 s 的值被存储在 ptr 中(如果 ptr 不是 NULL)。
替代函数 _strtol_r 是一个可重入版本。额外的参数 reent 是一个指向可重入结构的指针。### 返回值
strtol 返回转换后的值(如果有)。如果没有进行转换,则返回 0。
如果转换后的值的幅度太大,strtol 将返回 LONG_MAX 或 LONG_MIN,并将 errno 设置为 ERANGE。
---
**权威来源**: BUSMASTER DITA help source `strtol.dita`, compiled into `BUSMASTER.CHM` with the application.