C 给出分段错误的基本布尔函数
因此,我试图更好地学习函数,能够编写一个有用的函数,然后在其中编写一个递归函数,并对给定给程序的数字列表进行排序。但是我在这里遇到了一个分割错误。当我尝试读取C 给出分段错误的基本布尔函数,c,C,因此,我试图更好地学习函数,能够编写一个有用的函数,然后在其中编写一个递归函数,并对给定给程序的数字列表进行排序。但是我在这里遇到了一个分割错误。当我尝试读取argv[I+1]时,当我在argv[]中的条目用完时,我感觉这种情况正在发生。然而,为什么我的if(ival2){返回false;} else{return true;} } //int值[],int n int main(int argc,char*argv[]) { 对于(int i=1;i 为什么我的if(i
argv[I+1]
时,当我在argv[]
中的条目用完时,我感觉这种情况正在发生。然而,为什么我的if(i
语句检查这一点不能阻止这种情况发生
这是我的密码
#include <stdio.h>
#include <ctype.h>
#include <math.h>
#include <string.h>
#include <stdbool.h>
bool compare(val1,val2)
{
if(val1 > val2){return false;}
else{return true;}
}
// int values[], int n
int main(int argc, char *argv[])
{
for(int i=1; i<argc; i++){
//print unsorted list
printf("%s\n",argv[i]);
if(i < argc){
if(compare(*argv[i],*argv[i+1]))
{
printf("true\n");
}
else
{
printf("false\n");
}
}
// Add else for odd numbered lists
}
return 0;
}
#包括
#包括
#包括
#包括
#包括
布尔比较(val1,val2)
{
如果(val1>val2){返回false;}
else{return true;}
}
//int值[],int n
int main(int argc,char*argv[])
{
对于(int i=1;i
为什么我的if(i
语句检查这个时不排除这个问题
防止发生什么
如果i小于argc(参数计数),则此语句允许代码继续。假设您有三个参数,则允许i以2或更小的值继续
在下一行中,您将尝试访问argv[i+1]。我们已确定i可能是2,因此您将尝试访问索引3处的项目。索引为0,共有3个项目(0、1、2),因此您将尝试访问不存在的项目
if(compare(*argv[i],*argv[i+1]))
为什么我的if(i
语句检查这个时不排除这个问题
防止发生什么
如果i小于argc(参数计数),则此语句允许代码继续。假设您有三个参数,则允许i以2或更小的值继续
在下一行中,您将尝试访问argv[i+1]。我们已确定i可能是2,因此您将尝试访问索引3处的项目。索引为0,共有3个项目(0、1、2),因此您将尝试访问不存在的项目
if(compare(*argv[i],*argv[i+1]))
如果i==argc-1
,则未定义argv[i+1]
例如,如果argc=3
这意味着您正在使用两个参数(argv[0]
,argv[1]
和argv[2]
已定义)。当i
等于2
时,调用argv[i+1]
时,您正试图访问argv[3]
您所要做的就是为
重新定义,并删除if(i
您的代码可能如下所示:
for(int i=1; i < argc-1; i++){
//print unsorted list
printf("%s\n",argv[i]);
if(compare(*argv[i],*argv[i+1]))
printf("true\n");
else
printf("false\n");
}
for(int i=1;i 如果i==argc-1
,则未定义argv[i+1]
例如,如果argc=3
这意味着您正在使用两个参数(argv[0]
,argv[1]
和argv[2]
已定义)。当i
等于2
时,调用argv[i+1]
时,您正试图访问argv[3]
您所要做的就是为
重新定义,并删除if(i
您的代码可能如下所示:
for(int i=1; i < argc-1; i++){
//print unsorted list
printf("%s\n",argv[i]);
if(compare(*argv[i],*argv[i+1]))
printf("true\n");
else
printf("false\n");
}
for(int i=1;i
如果i==argc-1
,argv[i+1]
未定义。就是这样,谢谢你的反馈。如果i==argc-1
,argv[i+1]
未定义。就是这样,谢谢你的反馈。