gpt4 book ai didi

c++ - 这段 C++ 代码是如何工作的?

转载 作者:行者123 更新时间:2023-11-30 02:02:08 24 4
gpt4 key购买 nike

enum STR2INT_ERROR { SUCCESS, OVERFLOW, UNDERFLOW, INCONVERTIBLE };

STR2INT_ERROR str2int (int &i, char const *s, int base = 0)
{
char *end;
long l;
errno = 0;
l = strtol(s, &end, base);
if ((errno == ERANGE && l == LONG_MAX) || l > INT_MAX) {
return OVERFLOW;
}
if ((errno == ERANGE && l == LONG_MIN) || l < INT_MIN) {
return UNDERFLOW;
}
if (*s == '\0' || *end != '\0') {
return INCONVERTIBLE;
}
i = l;
return SUCCESS;
}

我正在尝试编写一个程序,可以将从文件中读入的字符串解析为整数值。在寻找执行此操作的方法时,我在 stackoverflow 帖子上找到了上面的这段代码:

How to parse a string to an int in C++?

但是,我不明白它是如何工作的。具体来说,如果 errno 被赋值为 0,程序员为什么要检查 errno == ERANGE? (ERANGE是特殊值吗?)

其次,参数列表中的“char const *s”是什么意思?

PS:我在 C++ 编程方面不是很有经验。

最佳答案

代码使用 strtol() 进行解析。这是一个标准的 C 库函数。您可以在其他地方找到有关 strtol() 的文档:

strtol() man page on die.net

errno 变量是标准C 库定义的一个特殊的全局变量。如果函数遇到错误,则会将其设置为错误代码。因此,虽然 errno 在例程开始时被赋值为零,但 strtol() 函数会在遇到错误时为 errno 赋新值。以下 if 语句正在检查上溢和下溢错误情况。

char const *s参数是要解析的字符串。它是指向常量(只读)字符串的指针。按照惯例,字符串以 NULL 字节结束。

关于c++ - 这段 C++ 代码是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13568680/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com