Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Sign in to follow this  
fo_11

Duvida utilizar realloc

Recommended Posts

fo_11

Antes de olharem para o programa queria só dizer que ele está ainda com muitos problemas.

A minha duvida é como é que faço uma especie de reset a uma string, isto é, eu quero que fique de novo como ela está na inicialização.

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

int main()
{
    char *str=NULL,nome[20],ch,s[100];
    FILE *fp;
    int contador=0,flag=0;
    int num;
    printf("Nome ficheiro:");
    gets(nome);
    
    if((fp=fopen(nome,"r"))==NULL)
     printf("Nao foi possivel aceder ao ficheiro");
    
    while((ch=fgetc(fp))!=EOF)
      {if(ch==';')
        {flag++;
         if(flag%2==0)
          {num=atoi(str);
           //preciso de fazer uma especie de reset à string str no tamanho e na informacao contida
            
          }
        
         else
          {strcpy(s,str);
          //preciso de fazer uma especie de reset à string str no tamanho e na informacao contida
           
          }
        }
       str=(char*)realloc(str,(++contador)*sizeof(char));
       str[contador-1]=ch;
       s[100]='\0';
         
        
      }
    puts(s);
    printf("%d",num);
    
    system("pause");
}
      

Share this post


Link to post
Share on other sites
Baderous

Fazes um strcpy com um espaço vazio.

Fazer reset a uma string não é colocar lá um espaço vazio, porque na verdade a string continua a conter lá informação e o seu tamanho passa a ser 1!

Fazer reset consiste em colocar um '\0' na primeira posição. (supondo que por "reset" se entende apagar toda a informação existente na string)

No contexto deste problema, não consegui perceber se "fique de novo como ela está na inicialização." se refere a colocar str a NULL, mas vou supor que sim. Nesse caso, tens de fazer free à memória anteriormente alocada. Caso não seja isso então é a solução do '\0' que já falei.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.