函数
<cstdlib>

strtoul

unsigned long int strtoul (const char* str, char** endptr, int base);
将字符串转换为无符号长整型
解析 C 字符串 str,将其内容解释为指定 base 的整数,并以 unsigned long int 类型的值返回。

此函数的操作类似于 strtol 来解释字符串,但会生成 unsigned long int 类型的数字(有关解释过程的详细信息,请参见 strtol)。

参数

str
包含整数表示的 C 字符串。
endptr
char* 类型对象的引用,其值由函数设置为 str 中数值之后的下一个字符。
此参数也可以是空指针,此时它将不被使用。
base
决定有效字符及其解释的数字基数(radix)。
如果为 0,则使用的基数由序列中的格式决定(有关详细信息,请参见 strtol)。

返回值

成功时,函数返回转换后的整数,作为 unsigned long int 值。
如果无法执行有效的转换,则返回零值。
如果读取的值超出了 unsigned long int 可表示的值的范围,函数将返回 ULONG_MAX(在 <climits> 中定义),并将 errno 设置为 ERANGE

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
/* strtoul example */
#include <stdio.h>      /* printf, NULL */
#include <stdlib.h>     /* strtoul */

int main ()
{
  char buffer [256];
  unsigned long ul;
  printf ("Enter an unsigned number: ");
  fgets (buffer, 256, stdin);
  ul = strtoul (buffer, NULL, 0);
  printf ("Value entered: %lu. Its double: %lu\n",ul,ul*2);
  return 0;
}

可能的输出

Enter an unsigned number: 30003
Value entered: 30003. Its double: 60006


有关 endptr 参数实际应用的示例,请参见 strtol

数据竞争

str 指向的数组被访问,endptr 指向的指针被修改(如果非空)。

异常 (C++)

无异常保证:此函数从不抛出异常。

如果 str 没有指向一个有效的 C 字符串,或者 endptr 没有指向一个有效的指针对象,将导致未定义行为

另见