strtol , strtoul , strtolll , strtoull 或 atoi Subroutine
用途
将字符串转换为有符号或无符号的长整数或长整数。
库
标准 C 库 (libc.a)
语法
#include <stdlib.h>
unsigned long strtoul (String, EndPointer, Base)
const char *String;
char **EndPointer;
int Base;
long long int strtoll (String, EndPointer, Base)
char *String, **EndPointer;
int Base;
unsigned long long int strtoull (String, EndPointer, Base)
char *String, **EndPointer;
int Base;
int atoi (String)
const char *String;描述
strtol 子例程返回一个长整数,其值由 String 参数指向的字符串表示。 strtol 子例程将字符串扫描到与 Base 参数不一致的第一个字符。 将忽略前导空格字符,并且可选的符号可以在数字之前。
strtoul 子例程提供相同的函数,但返回无符号的长整数。
str收费 和 strtoull 子例程提供相同的函数,但分别返回长长整数和无符号长整数。
atoi 子例程等同于 strtol 子例程,其中 EndPointer 参数的值为空指针, Base 参数的值为 10。
如果 EndPointer 参数的值不为空, 那么结束扫描的字符的指针将存储在 EndPointer中。 如果无法形成整数,那么 EndPointer 参数的值将设置为 String 参数的值。
如果 Base 参数是介于 2 与 36 之间的值,那么主体序列的期望格式是表示其基数由 Base 参数指定的整数的字母和数字序列。 此序列可以选择以 + (正) 或-(负) 符号开头。 从 a (或 A) 到 z (或 Z) (含) 的字母被归为值 10 到 35; 只允许其归为值小于 Base 参数的字母。 如果 Base 参数的值为 16 ,那么字符 0x 或 0X (可选) 在字母和数字序列之前,后跟 + (正) 或-(负) 符号 (如果存在)。
如果 Base 参数的值为 0 ,那么字符串将确定 base。 因此,在可选前导符号之后,前导 0 表示八进制转换,前导 0x 或 0X 表示十六进制转换。 缺省值是使用十进制转换。
参数
| 项 | 描述 |
|---|---|
| String | 指向要转换的字符串。 |
| EndPointer | 指向包含未转换的第一个字符的字符串。 |
| 基本 | 指定要用于转换的基础。 |
返回值
成功完成后, 斯特托尔, 斯特图尔, 斯特尔费和 斯特图尔 子例程将返回转换后的值。 如果无法执行任何转换,那么将返回 0 ,并设置 errno 全局变量以指示错误。 如果正确的值超出可表示值的范围,那么 strtol 子例程根据值的符号返回值 LONG_MAX 或 LONG_MIN 。 而 strtoul 子例程返回值 ULONG_MAX。 str收费 子例程根据值的符号返回值 LLONG_MAX 或 LLONG_MIN。 strtoul 子例程返回值 ULONG_MAX,而 strtoull 子例程返回值 ULLONG_MAX。
错误代码
strtol 和 strtoul 子例程返回以下错误代码:
| 项 | 描述 |
|---|---|
| ERANGE | 转换后的数字的正确值会导致下溢或溢出。 |
| EINVAL | Base 参数的值无效。 |