我试图通过递归函数找到两个char数组之间的距离。首先看看我的run.c和lab_2__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);
}我知道我的实现还没有完成,似乎包含ai!=bi的if语句会导致SEGV,但我不确定,因为当我删除c递增的操作时,代码不会导致SEGV或被监视的命令倒置核心,我不知道我的错误是什么。
发布于 2018-12-15 21:21:12
问题是"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);您需要在这个函数中提供一个返回。
下一点是,您的characters10数组是const。调用find_distance_between_strings函数时,将删除此const限定符。这可能会导致错误,因为您不允许修改const变量。
要修复它,请将find_distance_between_strings的原型更改为以下内容(在.h和.c文件中):
find_distance_between_strings(const char b[]);为了进一步了解这一点,您需要进一步将helper函数原型更改为以下内容(在.h和.c文件中):
int helper(char a[], const char b[],int i, int c);最后一件事是,您的程序中没有当前的递归。
https://stackoverflow.com/questions/53797230
复制相似问题