我一直在从几个不同的角度攻击 atoi,试图一次从字符串中提取 1 位整数。
问题 1 - 调整数组大小
这个 50 个字符的数组的大小应该是 50 还是 51(以考虑空终止符)?
char fiftyNumbersOne[51] = "37107287533902102798797998220837590246510135740250";
问题 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
最佳答案
问题一
该数组的长度应为 51。但您可以通过简单地执行 char fiftyNumbersOne[] = "blahblahblah";
来避免手动计算。
问题2
aChar
不是指向原始字符串的指针;它只是一个孤立的 char
漂浮在内存中的某个地方。但是 atoi(&aChar)
将其视为指向以 null 结尾的字符串的指针。它只是遍历内存,直到恰好在某处找到 0
,然后将找到的所有内容解释为字符串。
你可能想要:
one = aChar - '0';
这依赖于 0
到 9
的字符值保证是连续的这一事实。
关于c - 使用 atoi,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5836206/