与atoi合作

P.B*_*key 1 c atoi

我一直在从几个不同的角度攻击atoi,试图从一个字符串一次提取整数.

问题1 - 调整数组的大小
这个50个字符的数组是50或51的大小(考虑空终止符)?

char fiftyNumbersOne[51] = "37107287533902102798797998220837590246510135740250";
Run Code Online (Sandbox Code Playgroud)

问题2 - atoi输出

我在这做错了什么?

char fiftyNumbersOne[51] = "37107287533902102798797998220837590246510135740250";
int one = 0;
char aChar = fiftyNumbersOne[48];
printf("%c\n",aChar);//outputs 5 (second to last #)
one = atoi(&aChar);
printf("%d\n",one);//outputs what appears to be INT_MAX...I want 5
Run Code Online (Sandbox Code Playgroud)

Oli*_*rth 7

问题1

数组应该是51的长度.但是你可以通过简单的操作来避免手动计算出来char fiftyNumbersOne[] = "blahblahblah";.

问题2

aChar不是指向原始字符串指针 ; 它只是一个孤立的char浮动内存在某处.但是atoi(&aChar)它将它视为指向以null结尾的字符串的指针.它只是简单地遍历内存,直到找到0某个地方,然后解释它所发现的所有内容.

你可能想要:

one = aChar - '0';
Run Code Online (Sandbox Code Playgroud)

这依赖于以下事实:0to 的字符值9保证是连续的.