我编写了一个将命令行参数转换为数字的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搞砸了。 我一直在看这个太久了,虽然很可能很明显,但我无法弄清楚这里有什么问题。
答案 0 :(得分:3)
你这样填写arrList
:
arrList[j] = num;
但j
为每个命令行参数重新开始,即World
的结果覆盖Hello
的结果。您应该存储到arrList[arrCount]
,因为arrCount
会在所有参数中增加。