Ir ao conteúdo
  • Cadastre-se

GabrielrRoc

Membro Júnior
  • Posts

    3
  • Cadastrado em

  • Última visita

Reputação

1
  1. Estou desenvolvendo essa biblioteca como trabalho final de Algoritimos e Estrutura de Dados I, estou com problemas na função quando o resultado da função leitorArquivo_ler. A biblioteca é essa "LeitorArquivo.h": #include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct{ FILE* arquivo; char* nomeArquivo; char delimitador; char* buffer; int tamBuffer; int tamArquivo; int posBuffer; int posArquivo; }LeitorArquivo; //PROTOTIPOS LeitorArquivo* leitorArquivo_criar(char* arquivo, int tamBuffer); int leitorArquivo_buffer(LeitorArquivo* leitor); void leitorArquivo_desalocar(LeitorArquivo* leitor); int leitorArquivo_ler(LeitorArquivo* leitor, char* endereco); int leitorArquivo_temMaisLinhas(LeitorArquivo* leitor); //IMPLEMENTACAO LeitorArquivo* leitorArquivo_criar(char* arquivo, int tamBuffer){ LeitorArquivo* l = (LeitorArquivo*) malloc (sizeof(LeitorArquivo)); l->delimitador = '\n'; l->posBuffer = 0; l->posArquivo = 0; l->tamBuffer = tamBuffer; int tam = strlen(arquivo); l->nomeArquivo = (char*) malloc (tam * sizeof(arquivo)); strcpy(l->nomeArquivo, arquivo); l->arquivo = fopen(l->nomeArquivo, "r"); if (l->arquivo == NULL){ printf ("\t Erro na abertura do arquivo! \n"); return 0; } else { fseek (l->arquivo, 0, SEEK_END); l->tamArquivo = ftell (l->arquivo); } return l; } int leitorArquivo_buffer(LeitorArquivo* leitor){ if(leitorArquivo_temMaisLinhas(leitor) != 1) return 0; fflush(leitor->arquivo); leitor->arquivo = fopen(leitor->nomeArquivo, "r"); int resultado = 0; fseek(leitor->arquivo, leitor->posArquivo, SEEK_SET); int tam = leitor->tamBuffer; if (leitor->arquivo == NULL){ printf ("\t Erro na abertura do arquivo!\n"); return 0; } else { leitor->buffer = (char*) malloc (tam * sizeof(char)); resultado = fread (leitor->buffer, 1, tam, leitor->arquivo); leitor->buffer[resultado] = '\0'; leitor->tamArquivo = ftell(leitor->arquivo); leitor->posBuffer = 0; leitor->posArquivo += tam; fclose(leitor->arquivo); } return 1; } void leitorArquivo_desalocar(LeitorArquivo* leitor){ free(leitor->nomeArquivo); free(leitor->buffer); free(leitor); } int leitorArquivo_ler(LeitorArquivo* leitor, char* endereco){ if(leitor->posArquivo == 0){ leitorArquivo_buffer(leitor); } else if(leitor->posBuffer >= leitor->tamBuffer){ free(leitor->buffer); leitorArquivo_buffer(leitor); } int inicio, fim, tam; char c = leitor->buffer[leitor->posBuffer], inter[500]; inicio = leitor->posBuffer; while(leitor->posBuffer < leitor->tamBuffer && c != leitor->delimitador){ c = leitor->buffer[++leitor->posBuffer]; } fim = leitor->posBuffer; leitor->posBuffer++; tam = fim - inicio; // strncpy(destino, origem, qtdCaracteres); strncpy(inter, leitor->buffer + inicio, tam); strcpy(endereco, inter); endereco[tam] = '\0'; return 1; } int leitorArquivo_temMaisLinhas(LeitorArquivo* leitor){ if(leitor->posArquivo >= leitor->tamArquivo){ if(leitor->posBuffer >= leitor->tamBuffer){ return 0; } } return 1; } E estou testando com esse código "LeitorArquivo.c": #include <stdio.h> #include <string.h> #include <stdlib.h> #include "leitorArquivo.h" int main(){ char* arquivo = "teste.txt"; int tamanho = 100; LeitorArquivo* l1 = leitorArquivo_criar(arquivo, tamanho); char linha[500]; while(leitorArquivo_temMaisLinhas(l1)){ leitorArquivo_ler(l1, linha); printf("%s \n", linha); } leitorArquivo_desalocar(l1); } E esse arquivo "teste.txt": Is this the real life or is it just fantasy E o problema é que a impressão após rodar o código é: s this the eal life r is it just fantasy Realmente não faço ideia do que possa estar acontecendo, alguém consegue me dar uma luz? Os arquivos estão anexados caso queiram testar. leitorArquivo.zip adicionado 24 minutos depois Consegui resolver dando um espaço nesse trecho do código, alguém explica por que?
  2. Olá pessoal, estou para comprar um notebook novo e fiquei entre o ASUS X550LN-BRA-DM551H, e o ASUS S46CB-BRAZIL-WH229H,a placa deles é bem parecida, a 840m 64 bits, e a Gt 740m 128 bits, gostaria de saber qual era superior, se é a gt 740m por ser 128 bits ou a 840m por ter um poder de fogo maior. Agradeço desde já.

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

×
×
  • Criar novo...