📅  最后修改于: 2023-12-03 14:59:51.010000             🧑  作者: Mango
strtoumax()
函数是C++标准库<cstdlib>
中提供的字符串转换函数之一,主要用于将字符串转换为无符号整数。它的原型如下:
uintmax_t strtoumax(const char *nptr, char **endptr, int base);
其中,nptr
为待转换的字符串指针,base
为进制数,endptr
用于存储转换结束的位置(即指向字符串中第一个无法转换的字符位置),可以为nullptr
。
需要注意的是,strtoumax()
函数返回值是一个uintmax_t
类型的无符号整数,如果转换失败,则返回UINTMAX_MAX
。
在使用strtoumax()
函数时,需要注意以下几点:
endptr
指向的位置是否与字符串末尾一致,以确保转换完整;base
参数需要根据实际情况设置,通常为10或16。下面给出一个示例,展示如何使用strtoumax()
函数将字符串转换为无符号整数:
#include <iostream>
#include <cstdlib>
int main()
{
const char * str1 = "123456";
const char * str2 = "0x1a2b3c";
char * endptr1 = nullptr;
char * endptr2 = nullptr;
uintmax_t num1 = strtoumax(str1, &endptr1, 10);
uintmax_t num2 = strtoumax(str2, &endptr2, 16);
if(endptr1 == str1 + 6 && endptr2 == str2 + 8)
{
std::cout << "Num1: " << num1 << std::endl; // 输出: Num1: 123456
std::cout << "Num2: " << num2 << std::endl; // 输出: Num2: 17150028
}
else
{
std::cerr << "Error" << std::endl;
}
return 0;
}
strtoumax()
函数在转换过程中可能会抛出以下异常:
errno
错误码:如果转换结果超出了uintmax_t
类型的范围,则会设置errno
为ERANGE
,并返回UINTMAX_MAX
;endptr
参数为nullptr
,则会发生空指针异常;base
参数不在指定区间,则会发生非法参数异常。需要注意的是,在使用strtoumax()
函数时,不要将空字符串或只包含空格字符的字符串作为参数,否则会发生errno
错误码为EINVAL
的异常。