C数组在第四个元素后开始读取

时间:2017-04-17 14:26:18

标签: c arrays

我编写了一个将命令行参数转换为数字的c程序。现在我希望这些数字存储在一个数组中。问题是当我打印出阵列中的那些元素时会发生一些奇怪的事情。从第六个元素开始打印数组。

这是我的代码:

int main(int argc, char *argv[])
{
    int i, j, num, randint, arrCount = 0;
    int arrList[1000] = {0};

    for(i=1; i<argc; ++i)
    {
        for(j=0; argv[i][j] != '\0'; ++j)
        {
            if (argv[i][j] >= 'A' && argv[i][j] <= 'Z')
            {
                num = argv[i][j] - 'A';
                //arrList[j] = num;
            }
            else if (argv[i][j] >= 'a' && argv[i][j] <= 'z')
            {
                num = argv[i][j] - 'a';
                //arrList[j] = num;
            }
            num = num + '0' - 47;
            arrList[j] = num;
            arrCount++;
            printf("%d ", num);
        }
    }
    printf("\n");

    for(i=0; i<arrCount; i++)
    {
         printf("%d ", arrList[i]);
    }
}

我跑来测试的命令是:

./encript Hello World

输出:

8 5 12 12 15 23 15 18 12 4 
23 15 18 12 4 0 0 0 0 0

当你看到数组从数组的第六个元素开始打印时,我可以弄清楚它为什么这样做。额外的零是因为数组是该数组中实际不存在的打印元素。我能想到的最多的是用于查找需要打印多少元素的arrCount搞砸了。 我一直在看这个太久了,虽然很可能很明显,但我无法弄清楚这里有什么问题。

1 个答案:

答案 0 :(得分:3)

你这样填写arrList

arrList[j] = num;

j为每个命令行参数重新开始,即World的结果覆盖Hello的结果。您应该存储到arrList[arrCount],因为arrCount会在所有参数中增加。