[英]Basic Bool function giving segmentation fault
因此,我正在尝试更好地学习函数,并且能够编写一个有用的函数,然后再编写一个递归的函数,并对提供给该程序的数字进行排序。 但是,我在这里遇到细分错误。 当我用尽argv[]
的条目时,尝试读取argv[i+1]
时,我会感觉到这种情况。 但是,为什么我的if(i < argc){
语句检查此语句不会阻止这种情况的发生?
这是我的代码。
#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;
}
为什么我的
if(i < argc){
语句不检查此语句,这是不可能发生的?
如果i小于参数计数argc,则此语句允许代码继续执行。 假设您有3个参数,则允许我以2或更小的值进行运算。
在下一行中,您尝试访问argv [i + 1]。 我们已经确定我可能是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]
。
您要做的就是重新定义您的for
并删除if(i < argc)
。
您的代码可能如下所示:
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");
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.