关于空指针和赋值C
我被任务缠住了,似乎无法让它正常工作,我们将感谢您的帮助!:) 任务是列出从程序参数传递的最小值和最大值之间的素数(如果顺序错误,则交换最小值和最大值)。我被告知要防止空指针,并且不检查argv(?)会有一些问题。(我不包括主要部分,因为这是可行的) Main.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
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
ingargv
之前检查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;