Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C-分段故障(堆芯倾倒)_C - Fatal编程技术网

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

在下面的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,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。