c - C中两个指针之间的距离

标签 c pointers distance

我有一个函数,它应该读取一个字符串(其中只有数字)并返回没有重复数字的最大序列。 例如: 12345267890

它应该返回:345267890

我已经手动试验了代码,我相信它应该可以工作。但是当我运行它时,当它到达这一行 i=(strchr(v+i, *(v+j)))-v; 而不是获取指针之间的距离时,我得到了一些东西比如-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() 不保证以 null 终止您的字符串;我不确定这是否是您的问题的一部分。

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

相关文章:

android - 安卓和iphone之间的距离

c - 添加额外的 printf 行会影响 C 代码

c# - 是否有类似 Shazzam 和 Soundhood 的歌曲检测库?

c - Microduino ENC28J60 以太网模块(Arduino 兼容)UDP 发送不工作

c++ - C++ 中的 "cout << "错误

c# - SWIG:C++ 到 C#,指针到指针编码

c - 错误 : invalid type argument of unary '*' (have 'int' )

Android和使用sqlite的两点之间的距离

google-maps - 谷歌地图显示两个地点之间的路线和距离

c - 如何在 C 中仅使用 printf、scanf、while、if 和 for 获取字符串中 float 的值