我坚持我的任务,我似乎无法让它工作,你的帮助将不胜感激!:)
任务是列出从程序参数传递的最小最大值之间的素数(交换最小值和最大值,如果顺序错误)。我被告知要防止空指针,并且没有检查argv(?)有一些问题。(因为有效,我不会包括素数部分)
MAIN.C
void proc(int argc, char *argv[])
{
int min,max;
min=atoi(argv[1]);
max=atoi(argv[2]);
if(min>max)
{
swap(min, max);
printf("Min&max swapped!");
}
if(argc!=3)
{
printf("Please set 2 numbers as interval");
exit(EXIT_FAILURE);
}
prime(min,max);
return EXIT_SUCCESS;
}
int main(int min,int max)
{
proc(min, max);
}
Swap.c
void swap(int *a,int *b)
{
int c = *a;
*a = *b;
*b = c;
}
答案 0 :(得分:2)
在访问argc
之前检查argv
值,这样就可以消除访问超出内存的可能性。
此外,交换应获取最小值和最大值的地址,以便可以反映更改。
swap(&min,&max);
void swap(int *x,int *y)
{
int t=*x;
*x=*y;
*y=t;
}
if( argc != 3)
{
printf("[%s]:[progname num1 num2]\n");
return 0;
}
...
...
min = atoi(argv[1]);
..
max = ..
if(max<min)
swap(&max,&min);
答案 1 :(得分:2)
int min,max;
...
swap(min, max);
好的,所以你传递了swap
函数两个int
s。
void swap(int *a,int *b)
但swap
需要两个int*
。这不可能是好事。
此外:
int* c = *a;
嗯,a
的类型为int*
,因此*a
的类型为int
。那么为什么要将它分配给int*
类型的变量?这也不是好事。