Vladimir Gamalyan Asked:2020-12-16 03:11:07 +0000 UTC2020-12-16 03:11:07 +0000 UTC 2020-12-16 03:11:07 +0000 UTC std::atoi 中的前导“0” 772 这是将“10”打印到控制台(VS2017)的代码: #include <iostream> int main() { int a = std::atoi("010"); std::cout << a << std::endl; } 那些。前导零被忽略,但它的标准化程度如何?我没有在 这里或这里找到它。 c++ 2 个回答 Voted Harry 2020-12-16T03:17:57Z2020-12-16T03:17:57Z 它符合标准 -atoi使用十进制表示。 如果您希望前缀0表示一个八进制值和0x一个十六进制值,请查看例如侧面stoi或strtol数字系统 0 的基数指示。 PS顺便说一句,根据您的链接,它已明确说明- 采用可选的初始加号或减号,后跟尽可能多 的以 10 为基数的 数字,并将它们解释为数值。 Best Answer αλεχολυτ 2020-12-16T21:54:31Z2020-12-16T21:54:31Z 根据 C11 标准,除了错误行为之外,该功能是int atoi(const char *nptr);等效的。(int)strtol(nptr, (char **)NULL, 10) 在对后者的描述中,除其他外,它说: ... 只允许赋予值小于 base 的字母和数字。 0是一个有效的十进制数字,因此前导零的存在不应影响调用的结果。 开头的零可能会影响数字系统基数的自动确定,即 指定时base = 0,但这atoi与此无关。
它符合标准 -
atoi
使用十进制表示。如果您希望前缀
0
表示一个八进制值和0x
一个十六进制值,请查看例如侧面stoi
或strtol
数字系统 0 的基数指示。PS顺便说一句,根据您的链接,它已明确说明-
采用可选的初始加号或减号,后跟尽可能多 的以 10 为基数的 数字,并将它们解释为数值。
根据 C11 标准,除了错误行为之外,该功能是
int atoi(const char *nptr);
等效的。(int)strtol(nptr, (char **)NULL, 10)
在对后者的描述中,除其他外,它说:
0
是一个有效的十进制数字,因此前导零的存在不应影响调用的结果。开头的零可能会影响数字系统基数的自动确定,即 指定时
base = 0
,但这atoi
与此无关。