【发布时间】:2018-08-07 22:27:03
【问题描述】:
所以为了练习,我写了一个小代码,它接受数组中可变数量的整数,然后确定最大值。
我想让程序可以从命令行运行(即 findMax 4, 5, 6, 20, 1, 3 的确切格式)。
所以考虑到argv[1] 是指向char 数组的指针,我想我可以从argv[1][0] 循环到argv[1][n]。
我认为指针是我无法让我的代码工作的原因。
在第一个代码中,我使用
sizeof(arr) / sizeof(arr[0]) = # of elements in array 'arr'
正确地给了我元素的数量。
但是,当我运行时
sizeof(argv[1]) / sizeof(argv[1][0]) = always return (integer) 4
我认为我在这里使用指针是否正确,这就是为什么大小总是相同的原因?我试图取消对它们的引用(单独和一起),但它产生了更令人困惑的结果。
这是不工作的完整代码。 除了出于某种奇怪的原因,它仅在我输入 两个 数字时才有效(即 findMax.exe 2, 3 将正确确定“3”是最大的数字)。
#include <stdio.h>
int main(int argc, char *argv[]) {
printf ("Finding largest value from input: %s", argv[1]);
int size = (int)sizeof(argv[1]) / (int)sizeof(argv[1][0]);
int x = 0;
int next;
int biggest = 0;
while (x < size) {
if (argv[1][x] != ',') {
next = argv[1][x];
printf("\n%c", (int)next);
if ((int)next > biggest) {
biggest = next;
}
}
x++;
}
printf("\nBiggest # is: %c", biggest);
return 0;
}
【问题讨论】:
-
因为
argv[1]是一个指针而不是一个数组。 -
因为
sizeof不是这样做的。 -
sizeof在编译时确定。argv[1]中的字符数在运行时确定。因此,您将永远无法在编译时知道size的值——您必须通过查看每个字符或使用执行此操作的库函数来实际检查argv[1]中的字符串。 -
这就是 argc 的用途
-
@DanielPryden 如果你有一个可变长度数组
sizeof在编译时未确定。