c程序中的分段错误[关闭]

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c程序中的分段错误[关闭]相关的知识,希望对你有一定的参考价值。

#include<stdio.h>

int encryption_check(char* s , char* t)
{
    printf("%s",s);
    int i=0 , diff = t[0] - s[0];

    while(s[i]!='' && t[i]!='')
    {
        if(t[i]-s[i]<=0)
        {
            return -1;
        }
        else if(t[i]-s[i]!=diff)
        {
            return -1;
        }
    }
    return diff;
}

int main()
{
    int d = 0;  
    char s[]= "abc";
    char t[]= "def";    // s=plain text and t=cipher text

    d = encryption_check(s,t);
    printf("%d",d);
    return 0;
}

encryption_check()返回加密文本和纯文本之间的差异。由于某种原因,这会给出分段错误。另外,我想知道如何将随机(非固定)长度的字符串传递给encryption_check()。谢谢 :)

答案

如果没有详细了解你的encryption_check应该做什么并保持简短,你的while循环不能终止,因为你的i在设置为0之后永远不会改变。

在第一轮,s[0] = 'a't[0] = 'd'所以t[0] - s[0] = 3所以在while的条件将是true。在随后的运行中,由于您没有迭代i,循环不会停止。

要修复它,只需添加i++如下:

while(s[i]!='' && t[i]!='') {
    if(t[i]-s[i]<=0) {
        return -1;
    } else if(t[i]-s[i]!=diff) {
        return -1;
    }
    i++;
}

以上是关于c程序中的分段错误[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

在Linux机器上运行C代码时出现分段错误(核心转储)[关闭]

什么会导致 C++ 中的分段错误? [关闭]

循环条件为ptr时的C - 分段错误!= NULL [关闭]

为啥在编译我的代码C(linux)时出现分段错误(核心转储)[关闭]

C++ SDL 分段错误

尝试在 C 中使用 realloc 扩展数组时出现分段错误错误 [关闭]