首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >strcmp:行内字段

strcmp:行内字段
EN

Stack Overflow用户
提问于 2012-12-21 17:39:31
回答 1查看 149关注 0票数 0

我正在编写一个版本的strcmp,它可以选择仅根据空格和字母数字字符(目录顺序)来比较字符串,也可以选择不区分大小写(Kernighan和Ritchie第121 5-16页)。因此,我想出了以下几点:

代码语言:javascript
复制
int strcmpdf (char* s, char* t)
{
    char a[100];
    char b[100];
    int i;
    int j;
    i = j = 0;
    if (directory){ /*compares strings solely on the basis of alphanumeric/space characters*/
        for (   ; *s != '\0'; s++)
            if (isalnum(*s) || isspace (*s) || *s == '\t' || *s == '\n')
                a[i++] = (fold && islower(*s))? toupper(*s) : *s;
        a[i] = '\0';
        for (   ; *t != '\0'; t++)
            if (isalnum(*t) || isspace (*t) || *t == '\t' || *t == '\n')
                b[j++] = (fold && islower(*t))? toupper(*t) : *t;
        b[j] = '\0';
        return strcmp(a,b);
    }else if (fold && !directory){/*folds upper and lower cases together*/
        for (   ; toupper(*s) == toupper(*t); s++,t++)
            if (*s == '\0')
                return 0;
        return toupper(*s) - toupper(*t);
    }else
        return strcmp(s,t);
}

这很好地解决了这个问题,但是当我开始使用char指针而不是数组时,问题就开始了。当我初始化char* a和char* b而不是数组a和b,并在第11和12行用*a++替换ai++,在第15和16行用*b++替换bj++时,我得到了一个分段错误。当a+i是ai的地址时,为什么会出现这个错误?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-12-21 17:58:49

当你声明一个像'char a100‘这样的数组时,它会在堆栈上分配100个字符(字节),'a’指向第一个字符。

当你声明一个像'char *a‘这样的指针时,它一开始并没有指向任何有效的东西。您不能将任何内容赋值给'*a‘,除非它引用了有效的内容。

你可以这样做:

代码语言:javascript
复制
char aa[100];
char *a = aa;

*a = '\0';

(当我开始学习C语言时,我自己也犯了类似的错误,并且也有seg错误)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13987627

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档