C-分段故障(堆芯倾倒)
在下面的c程序中,我不断地得到分段错误。请帮我调试这个程序C-分段故障(堆芯倾倒),c,C,在下面的c程序中,我不断地得到分段错误。请帮我调试这个程序 #include<stdio.h> #include<stdlib.h> #include<ctype.h> #include<string.h> int numcmp(const char *a,const char *b){ if(atoi(a)==atoi(b)) return 0; return -1; } int isequal(char *a,char *b,i
#include<stdio.h>
#include<stdlib.h>
#include<ctype.h>
#include<string.h>
int numcmp(const char *a,const char *b){
if(atoi(a)==atoi(b)) return 0;
return -1;
}
int isequal(char *a,char *b,int (*cmp)(const char *,const char *)){
if(!cmp(a,b)) return 1;
return 0;
}
int main(int argc,char *argv[]){
if(argc!=3){
puts("Usage: Compare two string alphabeticaly or numericaly");
printf("Syntax: %s string1 string2\n",argv[0]);
exit(-1);
}
if(isequal(argv[1],argv[2],isalpha(argv[1])?strcmp:numcmp))
printf("%s and %s are equal\n",argv[1],argv[2]);
else
printf("%s and %s are not equal\n",argv[1],argv[2]);
}
isalpha只适用于字符,而不适用于整个字符串。您可以为此编写一个函数:
/* 1 - only letters, 0 - other characters */
int str_isalpha(const char* str) {
while (*str)
if (!isalpha(*(str++)))
return 0;
return 1;
}
然后适当地使用它。但事实上,我看不出有什么理由在这里使用numcmp。比较int和const char*s应该会得到类似的结果。编译程序时是否收到任何警告?我希望在isalphaargv[1]?strcmp:numcp行上至少有一个。您是否尝试自己调试它?没有警告,程序已成功编译。运行程序isalphaargv[1]->isalpha*argv[1]@BLUEPIXY时出错,但这不只是检查第一个字符是否为字母吗?谢谢,它起作用了。但是,比较int和const char*s的方法并不相同。123和123.00在使用strcmp进行比较时不相等,但在使用numcp进行比较时相等。@bipullanjan AFAIK,atoi仅适用于int。对于小数,请使用atof。