我正在尝试运行以下代码,但输入字符后会出现Segmentation Fault。
任何人都知道这里会发生什么?
我创建了两个函数,其中一个(palavra)从一个句子中获取一个单词,然后func compare_dicionario尝试在字典文件中找到匹配的单词。
主要功能是为了测试这两个功能而构建的,但输入短语后它不起作用...
#include <stdio.h>
#define MAX 1000
int compare_dicionario(int tam, char pal[MAX]) {
FILE * entrada_dic;
int leitura, i, j=0, parar, achou;
char pal_dic[MAX];
entrada_dic = fopen("dicionario.txt", "r");
while(leitura!=EOF && !achou) {
parar = 0;
achou = 1;
for(i=j; !parar; i++) {
leitura = fscanf(entrada_dic, "%c", &pal_dic[i]);
if(pal_dic[i] == '\n') {
i--;
j++;
parar = 1;
}
}
if(tam == i) {
for(i=0; i<tam && !achou; i++) {
if(pal[i] != pal_dic[i])
achou = 0;
}
}
else
achou = 0;
}
fclose(entrada_dic);
return achou;
}
void palavra(int n, int *m, int *l,char texto[MAX], char pal[MAX]) {
int i;
*l = 0;
for(i=*m; i<n && ((texto[i] >= 'a'&& texto[i] <= 'z') || (texto[i] >= 'A'&& texto[i] <= 'Z')); i++) {
pal[*l] = texto[i];
*l = *l+1;
}
while(!((texto[i] >= 'a'&& texto[i] <= 'z') || (texto[i] >= 'A'&& texto[i] <= 'Z'))) {
i++;
}
*m=i;
}
int main() {
int n, i, cont=1, n_pal, m=0, tam, achou=0;
char c[MAX], pal[MAX];
printf("Entre com o tamanho da sequência de caracteres:\n");
scanf("%d", &n);
printf("Entre com os caracteres:\n");
for(i=0; i<n; i++) {
scanf(" %c", &c[i]);
}
for(i=0; i<2; i++) {
palavra(n, &m, &tam, c, pal);
if(compare_dicionario(tam, pal) == 1) {
achou++;
}
}
printf("%d", achou);
return 0;
}
答案 0 :(得分:0)
只是一个想法,在这里:
for(i=0; i<2; i++) {
palavra(n, &m, &tam, c, pal);// here
if(compare_dicionario(tam, pal) == 1) {
achou++;
}
}
为什么在函数参数中使用一个地址,稍后在分配给迭代器的地址后,你的函数需要一个指针给她。
for(i=*m;..
阅读更多内容here