我尝试通过递归函数查找两个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或受监视的命令转储核心,我不知道我的错是什么。
答案 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);
最后一件事是您的程序目前没有递归。