将字符串转换为 long
整数值。
语法
long strtol(
const char *string,
char **end_ptr,
int base
);
long wcstol(
const wchar_t *string,
wchar_t **end_ptr,
int base
);
long _strtol_l(
const char *string,
char **end_ptr,
int base,
_locale_t locale
);
long _wcstol_l(
const wchar_t *string,
wchar_t **end_ptr,
int base,
_locale_t locale
);
参数
string
要转换的 null 终止的字符串。
end_ptr
输出参数,其设置为指向最后一个已解释字符之后的字符。 如果为 NULL
,则忽略它。
base
要使用的基数。
locale
要使用的区域设置。
返回值
strtol
、wcstol
、_strtol_l
和 _wcstol_l
返回 string
中表示的值。 如果无法转换,则返回 0。 如果这些表示形式会导致溢出,则返回 LONG_MAX
或 LONG_MIN
。
如果出现溢出或下溢,则 errno
设置为 ERANGE
。 如果 string
为 NULL
,则其设置为 EINVAL
。 或者 base
非零且小于 2 或大于 36 也是如此。 有关 ERANGE
、EINVAL
和其他返回代码的详细信息,请参阅 errno
、_doserrno
、_sys_errlist
和 _sys_nerr
。
注解
strtol
、wcstol
、_strtol_l
和 _wcstol_l
函数可将 string
转换为 long
。 它们在未识别为数字的一部分的第一个字符处停止读取 string
。 它可能是 null 终止字符,也可能是大于或等于 base
的第一个字母数字字符。
wcstol
和 _wcstol_l
是 strtol
和 _strtol_l
的宽字符版本。 其 string
参数是宽字符字符串。 这些函数在其他方面具有与 strtol
和 _strtol_l
相同的行为。 区域设置的 LC_NUMERIC
类别设置可确定 string
中基数字符(小数标记或小数点)的识别。 strtol
和 wcstol
函数使用当前的区域设置。 _strtol_l
和 _wcstol_l
改用传入的区域设置。 有关详细信息,请参阅 [setlocale
] 和 Locale。
如果 end_ptr
为 NULL
,则忽略它。 否则,则在 end_ptr
所指向的位置存储指向字符的指针(该指针停止扫描)。 如果未找到有效数字或指定了无效基数,则无法进行转换。 然后会将 string
的值存储在由 end_ptr
指向的位置。
strtol
需要 string
指向以下形式的字符串:
方括号 ([ ]
) 括起的是可选元素。 大括号和竖线 ({ | }
) 括起的是单个元素的替代项。 whitespace
可能包含被忽略的空格和制表符。 alphanumerics
是十进制数字,或是 'a'
到 'z'
(或 'A'
到 'Z'
)的字母。 不符合此形式的第一个字符将停止扫描。 如果 base
介于 2 和 36 之间,则将它用作数字的基数。 如果 base
为 0
,则使用由 string
指向的字符串的初始字符来确定基数。 如果第一个字符为 0
,且第二个字符不为 'x'
或 'X'
,则将该字符串视为八进制整数。 如果第一个字符为 '0'
,且第二个字符为 'x'
或 'X'
,则将该字符串视为十六进制整数。 如果第一个字符是 '1'
至 '9'
,则将该字符串视为十进制整数。 字母 'a'
到 'z'
(或 'A'
到 'Z'
)赋值 10 到 35。 扫描仅允许字母值小于 base
的字母。 超出基数范围的第一个字符停止扫描。 例如,假设 string
开头为 "01"
。 如果 base
为 0
,则扫描程序假定它是八进制整数。 '8'
或 '9'
字符将停止扫描。
默认情况下,此函数的全局状态范围限定为应用程序。 若要更改此行为,请参阅 CRT 中的全局状态。
一般文本例程映射
TCHAR.H 例程 | _UNICODE 和 _MBCS 未定义 |
_MBCS 已定义 |
_UNICODE 已定义 |
---|---|---|---|
_tcstol |
strtol |
strtol |
wcstol |
_tcstol_l |
_strtol_l |
_strtol_l |
_wcstol_l |
要求
例程 | 必需的标头 |
---|---|
strtol |
<stdlib.h> |
wcstol |
<stdlib.h> 或 <wchar.h> |
_strtol_l |
<stdlib.h> |
_wcstol_l |
<stdlib.h> 或 <wchar.h> |
_strtol_l
和 _wcstol_l
函数是 Microsoft 的特有函数,不是标准 C 库的一部分。 有关兼容性的详细信息,请参阅 兼容性。
示例
请参阅 strtod
的示例。