Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<stdio.h>
- #include<stdlib.h>
- #include<string.h>
- #define IDSIZE 5 /// Tamanho das strings que serão salvas.
- /// Struct para compor a lista encadeada:
- typedef struct registro
- {
- /// 'id' guarda a string da instancia.
- char id[IDSIZE];
- /// Referência para o próximo elemento da lista:
- struct registro *prox;
- }REGISTRO;
- // Ponteiro para o arquivo com as strings:
- FILE *chFile;
- int main()
- {
- /// String auxiliar, para a qual serão lidas as strings do arquivo primeiramente.
- char strAuxRead[IDSIZE]={0};
- /// Ponteiro para o início da lista:
- REGISTRO *chIni = (REGISTRO*)malloc(sizeof(REGISTRO));
- /// Ponteiro auxiliar, para montar a lista:
- REGISTRO *chPercorre = chIni;
- /// Este é o ponteiro que muda estranhamente de valor.
- /// Neste código de teste eu nem uso ele para nada, apenas
- /// nos printfs abaixo para mostrar o problema.
- REGISTRO *cadIni = (REGISTRO*)malloc(sizeof(REGISTRO));
- chFile = fopen("keys.txt","r");
- /// Primeiro eu leio a primeira string do arquivo para o primeiro
- /// elemento da lista, antes de entrar no loop do while.
- fscanf(chFile, "%s", chIni->id);
- while(!feof(chFile)){
- /// Leio uma string de cada vez para 'strAuxRead',
- /// para testar seu comprimento e daí sim criar ou não
- /// um novo elemento para a lista.
- /// Aqui uso os printfs para mostrar que o ponteiro
- /// passa a apontar para outra área de memória, após
- /// algumas iterações.
- printf("\n - %p -\n", cadIni);
- fscanf(chFile, "%s", strAuxRead);
- printf("\n - %p -\n", cadIni);
- /// Se o comprimento da string lida for igual a IDSIZE, então
- /// esta string é adicionada à lista.
- if(strlen(strAuxRead) == IDSIZE){
- chPercorre->prox = (REGISTRO*)malloc(sizeof(REGISTRO));
- strcpy(chPercorre->prox->id, strAuxRead);
- chPercorre = chPercorre->prox;
- }
- }
- /// O último elemento aponta para NULL.
- chPercorre->prox = NULL;
- /// Teste só para ver se as strings salvas possúem comprimento IDSIZE.
- /*
- chPercorre = chIni;
- while(chPercorre)
- {
- printf("%s\n", chPercorre->id);
- chPercorre = chPercorre->prox;
- }
- */
- fclose(chFile);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement