打印数组中缺少第一个字符(循环时)

时间:2018-08-06 06:57:38

标签: c

非常简单的问题。为什么第一个字母被截断?打印下降的“丑角”。我看到我可以用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;
}

3 个答案:

答案 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;
}