将字符串转换为 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。 如果 EINVAL 为 string,则其设置为 NULL。 或者 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 和 区域设置。
如果 end_ptr 为 NULL,则忽略它。 否则,则在 end_ptr 所指向的位置存储指向字符的指针(该指针停止扫描)。 如果未找到有效数字或指定了无效基数,则无法进行转换。 然后会将 string 的值存储在由 end_ptr 指向的位置。
strtol 需要 string 指向以下形式的字符串:
[
whitespace] [{+|-}] [0[{x|X}]] [alphanumerics]
方括号 ([ ]) 括起的是可选元素。 大括号和竖线 ({ | }) 括起的是单个元素的替代项。
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 的示例。
另请参阅
数据转换
区域设置
localeconv
%>
字符串到数值函数
strtod, _strtod_l, wcstod, _wcstod_l
strtoll, _strtoll_l, wcstoll, _wcstoll_l
strtoul, _strtoul_l, wcstoul, _wcstoul_l
atof, _atof_l, _wtof, _wtof_l