段错误:11 while 运行 C 程序
Segmentation fault: 11 while running C program
我正在尝试 运行 以下代码,但在输入字符后出现分段错误。
有人知道这里会发生什么吗?
我创建了两个函数,其中一个 (palavra) 从句子中提取一个词,然后函数 compare_dicionario 试图在字典文件中找到匹配的词。
main函数就是为了测试这两个函数而建的,但是我输入了这个词组后就不行了...
#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;
}
只是一个想法,在这里:
for(i=0; i<2; i++) {
palavra(n, &m, &tam, c, pal);// here
if(compare_dicionario(tam, pal) == 1) {
achou++;
}
}
为什么要在函数参数中使用地址,该地址稍后分配给迭代器,您的函数需要一个指针将其提供给她。
for(i=*m;..
再读一些东西here
我正在尝试 运行 以下代码,但在输入字符后出现分段错误。
有人知道这里会发生什么吗?
我创建了两个函数,其中一个 (palavra) 从句子中提取一个词,然后函数 compare_dicionario 试图在字典文件中找到匹配的词。
main函数就是为了测试这两个函数而建的,但是我输入了这个词组后就不行了...
#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;
}
只是一个想法,在这里:
for(i=0; i<2; i++) {
palavra(n, &m, &tam, c, pal);// here
if(compare_dicionario(tam, pal) == 1) {
achou++;
}
}
为什么要在函数参数中使用地址,该地址稍后分配给迭代器,您的函数需要一个指针将其提供给她。
for(i=*m;..
再读一些东西here