c - 使用 atoi

标签 c atoi

我一直在从几个不同的角度攻击 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';

这依赖于 09 的字符值保证是连续的这一事实。

关于c - 使用 atoi,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5836206/

相关文章:

c - gcc -O 是否会对链接的静态库生效?

无法理解奇怪的 C 运行时错误。需要帮忙?

c - 我不明白 K&R C 书中的 atoi 函数?

const volatile 在生产代码中加倍

C程序编译但不运行

C程序的执行速度突然提高

c - C 语言中的 Atoi 函数?

c - 为什么 printf 转换大数?

没有参数的 c optarg atoi

c - 从文件中读取一个数字并将其转换为 C 中的整数