关于空指针和赋值C.

时间:2017-01-02 13:42:15

标签: c

我坚持我的任务,我似乎无法让它工作,你的帮助将不胜感激!:)

任务是列出从程序参数传递的最小最大值之间的素数(交换最小值和最大值,如果顺序错误)。我被告知要防止空指针,并且没有检查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;
}

2 个答案:

答案 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*类型的变量?这也不是好事。