关于空指针和赋值C

关于空指针和赋值C,c,C,我被任务缠住了,似乎无法让它正常工作,我们将感谢您的帮助!:) 任务是列出从程序参数传递的最小值和最大值之间的素数(如果顺序错误,则交换最小值和最大值)。我被告知要防止空指针,并且不检查argv(?)会有一些问题。(我不包括主要部分,因为这是可行的) Main.c void proc(int argc, char *argv[]) { int min,max; min=atoi(argv[1]); max=atoi(argv[2]); if(min>max

我被任务缠住了,似乎无法让它正常工作,我们将感谢您的帮助!:)

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

void swap(int *a,int *b)
{
    int c = *a;
    *a = *b;
    *b = c;
}

在访问
argv
之前,请检查
argc
值,这样可以消除访问超限内存的机会

此外,swap应该获得min和max的地址,以便反映更改

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”);
返回0;
}
...
...
min=atoi(argv[1]);
..
最大值=。。
如果(最大值)
好的,那么您传递函数二
int
s

void swap(int *a,int *b)
但是
swap
需要两个
int*
s。这不好

此外:


嗯,
a
的类型是
int*
,因此
*a
的类型是
int
。那么为什么要将其分配给
int*
类型的变量呢?这也不好。

你不是传递一个int指针来交换,只是它们的值,你应该使用操作符的地址。
swap(min,max);
应该是
交换(&min,&max)
swap
函数应该有一个if语句来检查
a
b
是否为空指针。您应该在
atoi
ing
argv
之前检查
argc
。如果用户没有提供数字,则会出现分段错误,请在尝试访问
argc>之前检查
argc
ode>argv
int*c
…?启用编译器警告。在swap中int之后键入*使int c=*a;我根据您的输入更正了代码,如果您不介意的话,还有一个问题,我在swap中添加了两行。c if(!a)返回0;if(!b)返回0;这是一个空指针检查,对吗?你拼错了
| |
。还有相关的小问题:我想不出一个好的理由来推荐
argc>3 | | argc<3
argc!=3
@JohnBollinger.:是的,我输入错误,出现了一点奇怪的错误..谢谢
int min,max;
...
  swap(min, max); 
void swap(int *a,int *b)
int* c = *a;