非常简单的问题。为什么第一个字母被截断?打印下降的“丑角”。我看到我可以用x = -1
来对修补程序进行硬编码,但是无法达到真正理解潜在问题和了解解决方案的目的。谢谢。
#include <stdio.h>
int main()
{
int x = 0;
char iArray[7] = 'Charles';
while (x < 7) {
x++;
printf("%c\n", iArray[x]);
}
return 0;
}
答案 0 :(得分:4)
您首先要递增索引,然后使用它来打印。
x++;
printf("%c\n", iArray[x]);
更改为
printf("%c\n", iArray[x]);
x++;
将解决该问题,并避免UB用于访问数组以外的内容。
当循环条件对于x==6
仍然为真,并且索引然后增加到7,这将访问iArray[7]
时,发生第二个提到的问题。这超出了数组,因为大小为7的数组中可合法访问的最高索引为索引6。
答案 1 :(得分:3)
尝试一下!
#include <stdio.h>
int main()
{
int x = 0;
char iArray[7] = 'Charles';
while (x < 7) {
printf("%c\n", iArray[x]);
x++;//increment after printing
}
return 0;
}
答案 2 :(得分:2)
在使用x之前,您将x递增1,因此x [0]将永远不会打印,x [0]包含'C'。使用后增加索引“ x”。
#include <stdio.h>
int main()
{
int x = 0;
char iArray[7] = "Charles";
while (x < 7) {
printf("%c\n", iArray[x]);
x++;
}
return 0;
}