比较两个字符导致超时:受监视的命令转储核心

时间:2018-12-15 21:03:21

标签: c char

我尝试通过递归函数查找两个char数组之间的距离。      首先查看我的run.c和lab_2_0_copy.h

run.c

#include <stdio.h>
#include "lab_2_0.h"
const char characters[10]={'A','N','E','X','A','M','P','L','E','!'};


int main(){

    find_distance_between_strings(characters);
    return 0;
}

lab_2_o_copy.h

#ifndef _LAB_2_0_
#define _LAB_2_0_

const char characters[10];

char read_character();
void find_distance_between_strings(char b[]);
void helper(char a[],char b[],int i,int c);


#endif

和lab_2_0.c,其中包括我的函数的实现

#include <stdio.h>
#include "lab_2_0.h"

char read_character(){
    char data;
    scanf(" %c",&data);
    return data;
}

/* TASK SOLUTIONS */

int helper(char a[],char b[],int i,int c)
{
 if(i<10)
 {
     a[i]=read_character();
     if(a[i]!=b[i])
     {
         c++;
     }
 }
}
void find_distance_between_strings(char b[])
{
    char a[10];
    helper(a,b,0,0);


}

我知道我的实现不完整的事实,似乎包含a [i]!= b [i]的if语句会导致SEGV,但是我不确定,因为当我删除c的递增操作时该代码不会导致SEGV或受监视的命令转储核心,我不知道我的错是什么。

1 个答案:

答案 0 :(得分:1)

问题在于,“ lab_2_0.h”文件中的辅助函数原型与“ lab_2_0.c”文件中的函数定义原型不匹配。

它应该是:

void helper(char a[],char b[],int i,int c);
在两个文件中

int helper(char a[],char b[],int i,int c);

下一步,如果您选择

int helper(char a[],char b[],int i,int c);

您需要在此函数中提供退货。

下一点是您的字符数组[10]是const。当您调用find_distance_between_strings函数时,将删除此const限定符。由于不允许您修改const变量,因此有可能导致错误。

要修复此问题,请将find_distance_between_strings的原型更改为以下内容(在.h和.c文件中):

find_distance_between_strings(const char b[]);

要进一步进行后续操作,您需要将辅助函数原型进一步更改为以下内容(在.h和.c文件中):

int helper(char a[], const char b[],int i, int c);

最后一件事是您的程序目前没有递归。