Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    [C] Allocare dinamicamente nelle funzioni

    Salve a tutti, ho questo problema:

    un file di testo txt è così formattato. nella prima riga c'è il numero di parole contenute (una per riga) all'interno di questo file.

    esempio:
    codice:
    4
    parola1
    parola2
    parola3
    parola4
    il numero di parole non è dato a priori (quindi va usata l'allocazione dinamica) ma sono massimo di 20 caratteri ognuna. Io voglio acquisirle chiamando una funzione apposita che mi vada a scandire questo file e memorizzare il contenuto in un puntatore che gli passo dal main (vedi codice sotto).

    il problema arriva ora: io nella funzione eseguo la malloc ma quando ritorno al main il vettore dinamico penso che venga deallocato perchè se faccio un ciclo di printf nel main non ottengo i valori che avrei dovuto acquisire.

    come posso usare la malloc in maniera tale da "vedere" i valori acquisiti all'interno della funzione anche nel main (e di conseguenza in qualsiasi altra funzione)?

    QUI IL CODICE:
    codice:
    #include <stdio.h> 
    #include <stdlib.h> 
    #include <string.h>  
    
    typedef struct qualsiasi {char parola[20]; } ind;  
    
    int dizionario(ind *indice);  
    
    int main() {     
      ind *indice;     
      int i,num;
    
      num=dizionario(indice); 
    
      return (EXIT_SUCCESS); }
    
    int dizionario(ind *indice) { 
      FILE* diz;
      int num,i;
      diz=fopen("/home/paolo/Documenti/Paolo/Docs/Algoritmi/NetBeans/lab04_es01/dizionario.txt","r");      
      fscanf(diz,"%d",&num);
      indice=malloc(num*sizeof(ind));
      for(i=0;i<num;i++) {
        fscanf(diz,"%s",indice[i].parola);
      }
      fclose(diz);
      return num; }
    Grazie!

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Devi usare un puntatore a puntatore per avere restituito il valore dell'indirizzo dell'area allocata. Ovvero

    codice:
    int dizionario(ind **indice);
    codice:
    num=dizionario(&indice);
    codice:
    int dizionario(ind **indice) {
    codice:
    *indice = (ind *)malloc(num*sizeof(ind));
    codice:
    fscanf(diz,"%s", (*indice)[i].parola);
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Grazie mille... non capisco una cosa però.
    quando tu scrivi:
    codice:
    *indice = (ind *)malloc(num*sizeof(ind));
    cosa vuol dire a livello logico fare (ind*) ?

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Sto solo indicando esplicitamente il tipo di dato restituito dalla malloc in quella linea

    http://it.wikipedia.org/wiki/Casting_(programmazione)
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    ok grazie, mi hai dato una grandissima mano!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.