我有一个函数,它应该读取一个字符串(只包含数字),并返回没有重复数字的最大序列。
例如:
一百二十三亿四千五百二十六万七千八百九十
它应该返回:345267890
我已经手动测试了代码,我相信它应该可以工作。但是当我运行它,当它到达这条线时,我得到的不是指针之间的距离,而是-1046583。我能做这个吗?

char* bigSeq(char *v){

    int i, j;
    char *aux, *bgst;
    aux=(char*) malloc(10*sizeof(char));
    bgst=(char*) malloc(10*sizeof(char));
    for(i=0;i<strlen(v);i++){
        for(j=0;j<strlen(v+i);j++){
            if(strchr(v+i, *(v+j)) != (v+j)){
                if(strlen(strncpy(aux, (v+i),j)) > strlen(bgst))
                    strncpy(bgst, (v+i),j);
                i=(strchr(v+i, *(v+j)))-v;
                break;
            }
        }
    }
    return bgst;
}

最佳答案

我认为您的问题在于strchr()和它在找不到您要搜索的字符时返回的内容。在这种情况下,它返回0,而不是传递给它的字符串的开始或结束。
您还应该检查将输入设为“const char *”,并查看为什么需要在两个循环的每次迭代中调用strlen()。你也许可以做得更好。
注意,如果非重复数字的最长子串都是10位数字,则分配的空间太小-还需要为字符串末尾的NUL'\0'分配一个字节。另外,strncpy()不能保证空终止字符串;我不确定这是否是您的问题的一部分。

关于c - C中两个指针之间的距离,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5640928/

10-10 13:59