Meu objetivo é simples. Eu quero criar uma lista (Tipo 3 nomes, ou 10 nomes). O Problema que estou tendo é que:
1) Não sei o tamanho dessa lista. Ela pode ter 400 Mil linhas, ou apenas 3 linhas.
2) Não sei a Qtd de Caracteres que essa linha terá, pode ser 20 caracteres ou 40 mil caracteres.
Pensei em usar ponteiro como no exemplo acima, pq pareceu melhor do que um vetor de caracteres. Isso porque vou precisar depois comparar determinada linha dessa lista com a linha de outra... Mas isso não é minha dúvida agora!
Minha dificuldade está na seguinte situação! Eu consigo atribuir valores a ela no código abaixo: Porém não serve isso pra mim!
List1[0] = "Bom dia 1";
List1[1] = "Bom dia 2";
List1[2] = "Bom dia 3";
List1[3] = "Bom dia 4";
O que eu quero e não sei fazer:
1) Quero declarar a Lista VAZIA mas minha idéia abaixo não funciona
char *List1[];
2) Quero adicionar items a minha lista através de uma variável tipo como abaixo que também não funciona
MINHA_VARIAVEL do tipo char (Lembrando não tem um tamanho fixo como informei acima, na verdade o valor dela é a linha que pego de um arquivo)
Agora Resumindo o que estou fazendo! Eu tenho 1 arquivo atual com 300 mil linhas onde juntei listas do Adblock. Eu leio cada linha desse arquivo e vou enviando para a minha PRIMEIRA Lista, caso a linha exista nessa lista meu programa vai gravar na outra lista. Que dei os nomes: No_Duplicados e Duplicados.
No FIM ao acabar de ler o arquivo, meu programa vai GRAVAR essas 2 listas em 2 arquivos diferentes!
Eu não quis gravar direto em arquivos linha a linha pq não consegui fazer, pois apenas entendi que pra gravar no arquivo eu teria que fechar ele, o que resultaria que eu estaria mechendo no meu HD Linha a Linha ou seja 300 mil vezes.... Pois eu não consegui por não saber, como eu conseguiria LER o arquivo se ele ainda nem foi gravado, pois a variável onde mandei gravar não mostrava nada!
Motivo pelo qual, pensei em criar essas 2 Listas Temporárias na memoria e gravar apenas ao terminar o trabalho no arquivo.
Eu tinha usado por exemplo:
fputs(Line_File, File_Duplicates);
Porém não conseguia em código sequer imprimir pra ver o que foi feito! Somente ao fechar o arquivo os dados estavam lá.
Alguém pode ajudar? Ou alguém tem alguma idéia do que posso fazer? Se posso trabalhar direto com arquivo sem sobrecarregar gravação no HD, ou se minha opção por variável como eu disse acima seria melhor?
Meu FOCO GERAL é: Ler esse meu arquivo de 300 mil linhas, enviar somente as linhas sem duplicidade para 1, e outro arquivo com as duplicidades (Sem repetir linhas iguais)
Ainda estou aprendendo a entender melhor Ponteiros, como mandar um valor do tipo vetor para um ponteiro e etc...
Pois os exemplos na internet só falam em inteiros, e claro uma letrinha só fica fácil mas não me ajuda a entender como usar mais que isso.
Mostrando 2 exemplos. Esse abaixo funciona:
#include <stdio.h>
void main () {
int Qtd_Linhas = 5;
char Simples[18] = "Slackware Simples";
char *List[Qtd_Linhas];
for (int i = 0; i < Qtd_Linhas; i++) {
List[i] = Simples; // NÃO SEI se isso é correto de se fazer!
printf("List = %s\n", List[i]);
}
}
Isso não funciona!
#include <stdio.h>
void main () {
int Qtd_Linhas = 0;
char Simples[18] = "Slackware Simples";
char *List[Qtd_Linhas];
Qtd_Linhas = 5; // ISSO NÃO FUNCIONA ele não aceita eu informar as linhas depois. Tipo MODIFICAR
for (int i = 0; i < Qtd_Linhas; i++) {
List[i] = Simples;
printf("List = %s\n", List[i]);
}
}
Fiquei sem saber se SOU OBRIGADO a tratar essa linha
char *List[Qtd_Linhas];
Antes de declarar ela, ou seja saber o valor dela.
Ou se posso não saber o valor e declarar ela e aumentar conforme o uso!