paulo1205
(usa Ubuntu)
Enviado em 23/08/2015 - 22:28h
raicai escreveu:
Bom dia pessoal, estava elaborando o seguinte código e me surgiu uma dúvida
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(){
char *entrada;
char *saida;
int n, i, q;
int compare;
entrada=(char *) malloc((n+1) * sizeof(char));
saida=(char *) malloc((n+1) * sizeof(char));
Quanto vale
n neste ponto do programa? Como pode usar um valor desconhecido para fazer alocação de memória?
Nessas alocações, você está alocando caracteres, não palavras.
printf("Digite quantas palavras deseja entrar: \n");
scanf("%d", &n);
Agora você finalmente definiu
n (ou não, pois
scanf () ainda pode falhar). Só que o ponto alocação já passou.
Além do mais, você dá a entender ao usuário que ele vai digitar a quantidade de palavras. Mas mesmo que a alocação estivesse no lugar certo, nós já vimos que você fez de uma forma em que aloca a quantidade de caracteres, não de palavras.
for(i=0; i<n; i++){
printf("");
scanf("%s", entrada);
}
Nesse laço de repetição, você sobrescreve o mesmo array de caracteres a cada nova leitura.
De novo, você comete o erro de não verificar se
scanf () falhou ou não. Só que agora comete ainda mais um erro em potencial, que é o de não limitar a quantidade máxima de caracteres que podem ser lidos numa palavra. Se a sua alocação quebrada (você não sabe o valor inicial de
n ) tiver alocado só um byte, qualquer palavra que você ler vai extrapolar o tamanho alocado, gravando os caracteres recebidos em memória que ou não deveria ser usada ou que deveria ser usada para outra coisa.
printf("Digite quantas palavras deseja sair: \n");
scanf("%d", &q);
for(i=0; i<q; i++){
printf("");
scanf("%s", saida);
}
Erros análogos aos já apontados acima.
int comparar= strcmpi(entrada, saida);
Aqui você compara somente duas palavras, não várias palavras de um conjunto com várias palavras de outro.
Cadê o resto do programa?
Uma dica que eu dou a você para fazer o que você quer é a seguinte: já que você lê primeiro todas as palavras de um conjunto, na hora de ler o segundo conjunto, compare cada palavra lida assim que terminar de lê-la. Assim, você economiza pelo menos um laço de repetição.