gpt4 book ai didi

c - 这个c程序空安全吗?

转载 作者:行者123 更新时间:2023-11-30 19:03:16 25 4
gpt4 key购买 nike

这是打印两个数字之间素数的程序吗a 和 b(null 是否安全)?

如果不是,如何添加空安全函数使其成为(NULL SAFE)

我尝试检查 argv[1] 或 argv[2] 是否等于 0但这不是它应该如何工作

对此有什么想法吗?

//check if a or b or both are negative numbers
int check_negative(int *x, int *y){

if(*x<0 || *y<0)
{
printf("Error : One or Both arguments are Negative\n");
return 1;
}
}

//check if n is a prime number
int isprime(int n)
{
int i, status = 1;

for(i=2; i <= n/2; ++i)
{
if (n%i == 0)
{
status = 0;
break;
}
}
return status;
}

int main(int argc, char* argv[] )
{

if(argc==1)
{
printf("Error : No arguments were passed\n");
return 0 ;
}

int a=atoi(argv[1]),b=atoi(argv[2]),n,status;

if(check_negative(&a,&b)==1)
{
return 0;
}

printf("Prime numbers between %d and %d are: \n", a, b);

for(n=a+1; n<b; ++n)
{
status = isprime(n);

if(status == 1)
printf("%d ",n);
}
return 0;
}

最佳答案

Is this c program null safe?

没有。

<小时/>

argc < 3时,以下失败(例如 2,1,0),因为它称为 atoi()NULL或未知。 @Ian Abbott

int a=atoi(argv[1]),b=atoi(argv[2]),n,status;

相反,将之前的测试从仅针对 1 进行测试更改为以下测试。请注意argc == 0可以在选定的平台上并通过某些函数调用来实现。

// if(argc==1)
if(argc < 3)
<小时/>

作为独立函数,check_negative()在取消引用之前不检查是否传递了空指针参数。添加检查

int check_negative(int *x, int *y){
if (x == NULL || y == NULL) return 0; /// or handle in some way
<小时/>

旁白:

isprime(Any_int_less_than_2)错误地返回1 .

for(i=2; i <= n/2; ++i)对于大的来说非常慢n 。建议更快for(i=2; i <= n/i; ++i)Sample

关于c - 这个c程序空安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54182132/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com