我在这里使用此代码遇到了麻烦:
unsigned long value = stoul ( s, NULL, 11 );
用c ++ 98
给我这个错误error: 'stoul' was not declared in this scope
它适用于C ++ 11,但我需要在C ++ 98上使用它。
答案 0 :(得分:6)
您可以使用cstdlib
中的strtoul
:
unsigned long value = strtoul (s.c_str(), NULL, 11);
一些差异:
std::stoul
的第二个参数是size_t *
,它将被设置为转换后的数字后的第一个字符的位置,而strtoul
的第二个参数的类型为{{ 1}}并指向转换后的数字后的第一个字符。char **
会抛出invalid_argument
异常,而std::stoul
则不会(您必须检查第二个参数的值)。通常,如果要检查错误:strtoul
char *ptr;
unsigned long value = strtoul (s.c_str(), &ptr, 11);
if (s.c_str() == ptr) {
// error
}
的范围,unsigned long
会在std::stoul
返回strtoul
时抛出out_of_range
例外并设置ULONG_MAX
} errno
。以下是std::stoul
的自定义版本,其行为应与标准版本相同,并总结了ERANGE
和std::stoul
之间的差异:
strtoul