strtol , strtoul , strtolll , strtoull 或 atoi Subroutine

用途

将字符串转换为有符号或无符号的长整数或长整数。

标准 C 库 (libc.a)

语法

#include <stdlib.h>
long strtol ( String,  EndPointer,  Base)
const char *String;
char **EndPointer;
int Base;
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_MAXLONG_MIN 。 而 strtoul 子例程返回值 ULONG_MAXstr收费 子例程根据值的符号返回值 LLONG_MAXLLONG_MINstrtoul 子例程返回值 ULONG_MAX,而 strtoull 子例程返回值 ULLONG_MAX

错误代码

strtolstrtoul 子例程返回以下错误代码:

描述
ERANGE 转换后的数字的正确值会导致下溢或溢出。
EINVAL Base 参数的值无效。