我试图用来getchar()读取输入数字的所有数字并将它们存储在一个数组中.但每次我运行程序时,第二个数字都会出错.
这是我的代码:
int ch = 0;
int digits[0];
int i = 0;
while ((ch = getchar()) != '\n') {
digits[i] = ch - '0';
i++;
}
Run Code Online (Sandbox Code Playgroud)
为了表明会出现什么问题,我插入了两个printf:
while ((ch = getchar()) != '\n') {
printf("%d ", ch);
digits[i] = ch - '0';
printf("%d\n", ch);
i++;
}
Run Code Online (Sandbox Code Playgroud)
例如,当我输入时1100,我得到:
49 49
49 1
48 48
48 48
当我在一个单独的循环中打印数组时,输出是:
1 10 0 0
当我输入时66666,我得到:
54 54
54 6
54 54
54 54
54 5
阵列是:
6 10 6 6 6
Run Code Online (Sandbox Code Playgroud)
我已经尝试了一堆不同长度的其他数字,每次第二个数字发生同样奇怪的事情,只有第二个数字.有谁知道为什么?非常感谢!
Joh*_*all 10
int digits[0];
Run Code Online (Sandbox Code Playgroud)
你有一个数字保持零位数.
int digits[32]; /* or some reasonable size, check for overflow... */
Run Code Online (Sandbox Code Playgroud)
正如已经指出过两次,你的数组的大小为零,因此不能容纳你试图在那里推的所有数字.
因此,当写入数组中的任何位置时,实际上是在写入用于其他内容的内存,ch例如hold.显然,这只是恰巧,你的程序预计地方(不存在的)digits[1]是,ch被存储.因此你覆盖ch了ch - '0'.
然后,当离开范围时ch,程序可以自由地在那里写其他东西.(因为显然不再需要记忆了.)显然它决定写一些有价值的东西10.这导致了"奇怪"的输出.
请注意,在数组范围之外进行写入和读取是未定义的行为,并且可能具有比此更差的副作用.尽量避免将来使用它.