我正在开发一个程序来确定一组值的模式,例如(3 4 2 3 3)应打印出“3”。 catch是程序必须接收执行数学函数的选项,并将其参数作为main函数中的参数,因此无需用户输入。必须在命令行中插入所有内容并使用指针进行检查。我的程序工作,例如说用户输入(模式)但之后没有输入任何值。然后应该打印一条只显示“ERROR”并且程序结束的消息。但是它没有打印
Johns-MacBook-Pro-2:AdvanceCalc jvdamore $ ./a.out模式 分段错误:11
何时打印
Johns-MacBook-Pro-2:AdvanceCalc jvdamore $ ./a.out mode ERROR
下面是我的代码。所以我的问题是我的if语句与strcmp(p [2],“”)== 0工作,以产生所需的错误信息?或者我做错了什么?
int main(int n, char **p)
{
int i, x, A[100];
if (strcmp(p[1], "mode")==0){
if (strcmp(p[2], "") == 0){
printf("ERROR");
return -1;
}
for(i=2;i<n;i++){
if (sscanf(p[i], "%d", &x) != 1) {
printf("ERROR");
return -1;
}
if (x<1 || x>30){
printf("ERROR");
return-2;
}
A[i-2]= x;
}
find_mode(A, n-2);
}
答案 0 :(得分:2)
不是将字符串与""
与strcmp进行比较,而是需要查看它是否为NULL。 strcmp( NULL, "" )
效果不佳,您应该这样做:
if( p[2] == NULL )
(嗯,实际上,你应该重命名变量argv
,还有其他一些问题,但这是主要问题。确保在引用之前检查p[1]
不是NULL p[2]
)