#define N 10
int main(int argc, char *argv[])
{
int *a = malloc(sizeof(N));
int i;
for(i = 1; i < argc; i++) {
*(a++) = atoi(argv[i]);
}
i = 0;
while(i < N) {
printf("%d ", *(a++));
i++;
}
}
我很困惑为什么我的输出全是0。我不确定如何修复它,因为我是命令行参数/指针的新手。这个程序的背景是它接受整数,然后应该使用atoi将它们从字符串转换为整数,然后使用指针算法将新数组打印出来。
答案 0 :(得分:1)
这有很多错误。
sizeof(N)给出整数常量的大小(可能是4个字节)。你的意思是malloc(N * sizeof(int));但是如果N是商城而且你在编译时就知道它,那么使用malloc并没什么意义。你想要malloc argc整数。然后程序将扩展到数百万个命令行参数,假设shell允许输入这么长的行。
然后当你指向一个指针时,你需要挂在它上面。不要增加它。如果你想要一个旅行指针,使用两个指针,a和ptr。指向缓冲区并“拥有”它,ptr是一个临时移动。但是,数组语法a [i]几乎总是优于行进指针。
然后,如果argc小于N,那么最后一次将打印垃圾值。这可能是你想要的学习练习/探索性编程,但不是你通常希望实现的目标。
答案 1 :(得分:1)
反对我更好的判断,这是你的家庭作业的解决方案。请注意以下事项:
N
参数#define N 10
int main(int argc, char *argv[])
{
int *numbers;
if (NULL != (numbers = malloc(N * sizeof *numbers))) {
for(int i = 0; i < (argc - 1); i++) {
*(numbers + i) = atoi(argv[i + 1]);
}
for(int* a = numbers; a < (numbers + (argc - 1)); a++) {
printf("%d ", *(a));
}
free(numbers);
}
}