-
Posts
4 -
Cadastrado em
-
Última visita
Tipo de conteúdo
Artigos
Selos
Fabricantes
Livros
Cursos
Análises
Fórum
posts postados por Matheus Dionysio
-
-
Usei a funçao bsearch pra fazer uma busca em um vetor de string e ta dando erro de segmentação , segue o código
#include <stdio.h>
#include <stdlib.h>
#include <string.h>char *dicionario[275502];
static int compara(const void *p1, const void *p2)
{
return strcmp(* (char * const *) p1, * (char * const *) p2);
}
int main () {
FILE *dic;
char *line = NULL;
size_t l = 0;
size_t nread;
int Lidos = 0,i;
char lido[22];
//carregar o dicionario para dentro do programadic = fopen ( "/usr/share/dict/brazilian", "r");
if( dic == NULL ){
printf("Erro, nao foi possivel abrir o arquivo\n");
exit(1);
}
else{while (( nread = getline(&line,&l,dic)) != -1)
{
char * novapalavra = malloc (nread-1);
strncpy(novapalavra,line , nread - 1);
dicionario[Lidos] = novapalavra;
Lidos++;
}
}//tratando o texto
scanf("%s", lido);while( *lido != EOF)
{//transformando tudo em minusculas
for (i=0; i < strlen (lido); i++)
if((lido) >= 65 && (lido) <= 90)
lido += 32 ;//Fazendo a busca no dicionario e imprimindo
if( bsearch(&lido,dicionario,275502,sizeof(char*), compara ))
printf(" %s \t",lido);
else
printf("[ %s ]\t", lido );
scanf("%s", lido);
}return (0);
} -
valeu cara, nem tinha percebido isso, fiquei até com vergonha kkk
Mas eu arrumei o erro e agora ta dando segmentation fault e não to entendendo o porque
Segue o codigo arrumado :
#include <stdio.h>
#include <stdlib.h>
#include <string.h>char *dicionario[275502];
int main () {
FILE *dic;
char *novapalavra;
char *line = NULL;
size_t l = 0;
size_t nread;
int Lidos = 0;//carregar o dicionario para dentro do programa
dic = fopen ( "/usr/share/dict/brazilian", "r");
if( dic == NULL ){
printf("Erro, nao foi possivel abrir o arquivo\n");
exit(1);
}
else{
while (( nread = getline(&line,&l,dic)) != -1)
novapalavra = (char *)malloc (nread-1);
strncpy(novapalavra,line , nread - 1);
dicionario[Lidos] = novapalavra;
Lidos++;
}return (0);
} -
Olá, tenho que fazer um programa que carrega o dicionario da partição /usr/share/dict/brazilian pra memória do programa , só que fiz alguma coisa errada e não estou conseguindo arumar .
Segue o código :
#include <stdio.h>
#include <stdlib.h>
#include <string.h>char *dicionario[275502];
int main () {
FILE *dic;
char *novapalavra;
char *line = NULL;
size_t l = 0;
size_t nread;
int Lidos = 0;//carregar o dicionario para dentro do programa
dic = fopen ( "/usr/share/dict/brazilian", "r");
if( dic == NULL ){
printf("Erro, nao foi possivel abrir o arquivo\n");
exit(1);
}
else{
while (( nread = getline(&line,&l,dic)) != -1)
*novapalavra = malloc (nread-1);
strncpy(novapalvra,line , nread - 1);
*dicionario[Lidos] = novapalvra;
Lidos++;
}
printf("%s \n",dicionario[0]);
printf("%s \n ",dicionario[1]);return (0);
}
e o erro é :sad.c: In function ‘main’:
sad.c:25:17: warning: assignment makes integer from pointer without a cast [-Wint-conversion]
*novapalavra = malloc (nread-1);
^
sad.c:26:12: error: ‘novapalvra’ undeclared (first use in this function)
strncpy(novapalvra,line , nread - 1);
^
sad.c:26:12: note: each undeclared identifier is reported only once for each function it appears in.Obs: eu tenho que colocar cada palavra(uma palavra por linha dentro do vetor).
Sobre o Clube do Hardware
No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais
Direitos autorais
Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais
Erro de segmentação com alocação dinamica de vetor
em C/C#/C++
Postado
Olá, estou fazendo um exercício em c , e nãoo sei porque a função esta dando falha de segmentação.
void preencher (int vetS[],int vetB[],int vetM[],int n ){
int i,e,a;
//Criando os vetores;
puts("Insira o numero de elementos no vetor" );
scanf("%i",&n);
vetS =(int *) malloc((n+1)*sizeof(int));
vetM =(int *) malloc((n+1)*sizeof(int));
vetB =(int *) malloc((n+1)*sizeof(int));
//prenchendo os vetores com numeros aleatorios
puts("digite : \n1 - Para gerar entre 0 e 9\n2 - para gerar valores entre 0 e 99\n3 - para gerar valores entre 0 e 999");
scanf("%i",&e);
while ( (e > 3) || (e <= 0) ){
puts("Favor digitar um numero entre 1 e 3");
scanf("%i",&e);
}
if( e == 3)
for (i = 1;i <= n;i++){
a = rand () %1000;
printf("%i\n",a );
vetS = a;
vetB = a;
vetM = a;
}
else if(e == 2)
for (i = 1;i <= n;i++){
a = rand () %100;
vetS = a;
vetB = a;
vetM = a;
}
else
for (i = 1;i <= n;i++)
{
a = rand () %100;
vetS = a;
vetB = a;
vetM = a;
}
}