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]
未定义。就是这样,谢谢你的反馈。