分段故障:11运行C程序时

时间:2015-05-23 13:14:28

标签: c runtime-error

我正在尝试运行以下代码,但输入字符后会出现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;
}

1 个答案:

答案 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