📜  C++中的strtoumax()函数(1)

📅  最后修改于: 2023-12-03 14:59:51.010000             🧑  作者: Mango

C++中的strtoumax()函数介绍

简介

strtoumax()函数是C++标准库<cstdlib>中提供的字符串转换函数之一,主要用于将字符串转换为无符号整数。它的原型如下:

uintmax_t strtoumax(const char *nptr, char **endptr, int base);

其中,nptr为待转换的字符串指针,base为进制数,endptr用于存储转换结束的位置(即指向字符串中第一个无法转换的字符位置),可以为nullptr

需要注意的是,strtoumax()函数返回值是一个uintmax_t类型的无符号整数,如果转换失败,则返回UINTMAX_MAX

使用示例

在使用strtoumax()函数时,需要注意以下几点:

  1. 转换结束后,需要检查endptr指向的位置是否与字符串末尾一致,以确保转换完整;
  2. 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()函数在转换过程中可能会抛出以下异常:

  1. errno错误码:如果转换结果超出了uintmax_t类型的范围,则会设置errnoERANGE,并返回UINTMAX_MAX
  2. 空指针异常:如果endptr参数为nullptr,则会发生空指针异常;
  3. 非法参数异常:如果base参数不在指定区间,则会发生非法参数异常。

需要注意的是,在使用strtoumax()函数时,不要将空字符串或只包含空格字符的字符串作为参数,否则会发生errno错误码为EINVAL的异常。

参考文献