Home C&C++函数库 c++ 语法 程序源码 Linux C库

strtol

函数   <cstdlib>

long int strtol (const char* str, char** endptr, int base);

将字符串转换为long integer

解析C-string str,将其内容解释为指定base(进制)的整数值,并返回一个long int值。
如果endptr不是空指针,该函数还将endptr的值设置为指向数字后面的第一个字符。

函数丢弃所有开头的空格字符,直到找到第一个非空格字符。
然后,从这个字符开始,根据base(进制)参数取尽可能多的有效字符,并将它们解释为数值。 最后,一个指向str中整数表示后第一个字符的指针存储在endptr所指向的对象中。

如果base(进制)的值为零,则期望的语法类似于整数常量,整数常量由一系列的:

如果base(进制)值在2到36之间,整数的格式是表示指定基数的整数所需的任何有效数字和/或字母的连续 (对于基数(进制)36,从'0'到'z'/' Z')。 序列前面可以有一个符号(+或-),如果base为16,则有一个可选的“0x”或“0x”前缀。

如果str中的第一个非空白字符序列不是上面定义的有效整数值, 或者由于str为空或仅包含空白字符而不存在这样的序列,则不执行转换。

对于“C”语言环境以外的语言环境,可以接受额外的主语顺序形式。

☲  参数


str
以整数表示开头的c字符串。

endptr
对已经分配的char*类型对象的引用,该对象的值由函数设置为数值后的str中的下一个字符。
这个参数也可以是一个空指针,在这种情况下它不会被使用。

base
确定有效字符及其解释的基数(radix)。
如果这是0,使用的基数是由序列中的格式决定的(参见上面)。

☉  返回值



如果成功,该函数将转换后的整数值作为long int 型值返回。

如果不能执行有效的转换,则返回零值(0L)。

如果读取的值超出了long int的可表示值范围,则函数返回LONG_MAX或LONG_MIN (在<climits>中定义),errno设置为ERANGE。

☣  示例



/* strtol example */
#include <stdio.h>      /* printf */
#include <stdlib.h>     /* strtol */

int main ()
{
  char szNumbers[] = "2001 60c0c0 -1101110100110100100000 0x6fffff";
  char * pEnd;
  long int li1, li2, li3, li4;
  li1 = strtol (szNumbers,&pEnd,10);
  li2 = strtol (pEnd,&pEnd,16);
  li3 = strtol (pEnd,&pEnd,2);
  li4 = strtol (pEnd,NULL,0);
  printf ("The decimal equivalents are: %ld, %ld, %ld and %ld.\n", li1, li2, li3, li4);
  return 0;
}

输出:
The decimal equivalents are: 2001, 6340800, -3624224 and 7340031

↭  数据竞争



str指向的数组被访问,endptr指向的指针被修改(如果不是null)。

❆  异常(c++)



无抛出保证:此函数从不抛出异常。
如果str没有指向有效的C-string,或者endptr没有指向有效的指针对象,将导致未定义的行为。

🍄  另请参阅



strtoul 将字符串转换为unsigned long integer(function )
strtod 将字符串转换为double (function )
atol 将字符串转换为 long integer (function )

联系我们 免责声明 关于CandCplus 网站地图