📜  C++ STL中的strtol()函数(1)

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

C++ STL中的strtol()函数

在C++ STL中,可以使用strtol()函数将字符串转换为长整型数(long integer)。本文将介绍strtol()函数的用法及其示例。

语法

strtol()的语法如下:

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

其中:

  • str:要转换的字符串
  • endptr:指向转换过程中停止的字符的指针(即剩余未被转换的字符串)。
  • base:表示数字的进制,可以是2到36之间的任何整数值。若省略此参数,则默认以10进制解释数字。
返回值

strtol()函数返回结果的长整型数(long integer)。如果发生错误,则返回0。

示例

下面的示例将一个十进制字符串转换为长整型数:

#include <iostream>
#include <cstdlib>

int main() {
    char num_str[] = "12345";
    char* endptr;

    long num = strtol(num_str, &endptr, 10);

    std::cout << "转换结果: " << num << std::endl;
    if (*endptr != '\0') {
        std::cout << "未被转换的字符串: " << endptr << std::endl;
    }

    return 0;
}

输出结果为:

转换结果: 12345

上述代码中,使用了strtol()函数将字符串num_str转换为长整型数num。转换时指定了进制为10进制(该参数被省略时默认为10进制)。

此外,我们在strtol()函数的第二个参数中传递了一个指向endptr指针的指针。这是因为strtol()函数在转换字符串时,如果遇到了无法转换的字符,会停止转换并将其余的字符串存储在endptr中。因此,通过查看endptr中未被转换的字符串,我们可以了解到转换过程中发生了什么。

注意事项
  • strtol()函数只能进行简单的整数字符串转换。如果需要处理浮点数字符串,应该使用strtof()或者strtod()函数。
  • 如果要处理负数字符串,需要先将负号转换为减号,并确保减号紧跟在负号后面。
  • 在转换时,如果遇到了除数字字符和空格以外的字符(如字母、标点符号等),strtol()函数会停止转换并将其余的字符串存储在endptr中。
  • 如果str参数为空指针,或只包含空格,strtol()函数将返回0。
  • 数字字符串的长度应该小于或等于LONG_MAX,否则将出现未定义的行为。
结论

strtol()函数是将字符串转换为长整型数的常用工具之一。了解其用法和注意事项,可以帮助程序员更好地处理字符串数据,并有效地避免错误。