我尝试阅读某些网站上的 atoi() 描述,但无法得到答案。什么会
int i = atoi("000000000000000000003");
printf("%d", i);
导致?它会是 3 还是会返回错误(在 atoi() 的情况下为 0)?
我目前没有任何可用的编译方法,所以我不能只测试它。
编辑:意外地将 000000000000000000003 而不是“000000000000000000003”作为参数。
Edit2:关于测试的部分不再相关,谢谢。
我尝试阅读某些网站上的 atoi() 描述,但无法得到答案。什么会
int i = atoi("000000000000000000003");
printf("%d", i);
导致?它会是 3 还是会返回错误(在 atoi() 的情况下为 0)?
我目前没有任何可用的编译方法,所以我不能只测试它。
编辑:意外地将 000000000000000000003 而不是“000000000000000000003”作为参数。
Edit2:关于测试的部分不再相关,谢谢。
根据这个参考:
该函数首先根据需要丢弃尽可能多的空白字符(如在 isspace 中),直到找到第一个非空白字符。
在您的示例中,找到的第一个字符是非空格(0!=空格字符)所以..
从此字符开始,采用可选的初始加号或减号,后跟尽可能多的以 10 为基数的数字,并将它们解释为数值。
这意味着该函数读取字符,只要它们是基于 10 作为基数的数字,直到 if 找到一个不是字符,例如 a(
或l
etter 或空终止字符\0
。然后...
将其内容解释为整数,该整数作为 int 值返回。
所以你的例子是这样的:
int i=000000000000000000003;
如果你printf("%d", i)
这个值机器将输出3
,就像你的问题一样。