Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2002
    Messaggi
    143

    Gestione stringhe in ansi C

    Voolevo sapere come gestire delle stringhe dichiarate in un a struttura e passarle come parametro per una funzione.

    Ad esempio

    typedef struct PROVA {
    int a:
    char stringa[];
    } TEST

    nel prototiopo

    void funzione (int a, char stringa[]);

    nella funzione

    void funzione (int a, char stringa[]) {
    PROVA *new;
    newptr=malloc (sizeof(struct TEST));
    newptr->stringa=testo;
    }

    così a grandi linee dovrebbe essere giusto?

    e ancora, non è necessario specificare a priori la grandezza della stringa? (se no mi da erroe quando dichiaro la struttura)

    In pratica il problema è leggere una stringa nel MAIN, e poi associarla al campo stringa della struttura.

    Grazie

    Ciao
    Death to False Metal

  2. #2
    Utente di HTML.it L'avatar di Grunt
    Registrato dal
    Dec 2001
    Messaggi
    246
    Ti conviene allocare staticamente la stringa nella struttura
    codice:
    typedef struct PROVA{
         int a;
         char stringa[256];
    }
    In questo modo puoi usare la stringa all'interno in modo molto + semplice, altrimenti devi allocarti anche la stringa dopo la struttura.
    es.
    codice:
    typedef struct PROVA{
         int a;
         char *stringa;
    }
    
    int main (int argc, char **argv)
    {
          PROVA *Newp;
    
          Newp=malloc(sizeof(PROVA));
          Newp->stringa=malloc(256*sizeof(char));

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2002
    Messaggi
    143
    int main (int argc, char **argv)


    perchè mi servono questi due parametri nel main?


    mettiamo ad esempio che io voglia inserire in input una stringa di n caratteri, utilizzando

    gets(stringa)

    ora volgi allocare un 'area di memoria esattamente pari alla lungezza della stringa inserita, in modo da non sprecare spazio.

    Posso farlo una volta inserita la stringa, o devo farlo prima?
    Death to False Metal

  4. #4
    Utente di HTML.it L'avatar di Grunt
    Registrato dal
    Dec 2001
    Messaggi
    246
    Originariamente inviato da Metallox
    int main (int argc, char **argv)


    perchè mi servono questi due parametri nel main?
    argc e argv si usano quando vuoi passare argomenti al comando (programma)
    es myprog arg1 arg2 ecc....
    argc contiene il numero di argomenti
    argv contiene gli argomenti.
    mettiamo ad esempio che io voglia inserire in input una stringa di n caratteri, utilizzando

    gets(stringa)

    ora volgi allocare un 'area di memoria esattamente pari alla lungezza della stringa inserita, in modo da non sprecare spazio.

    Posso farlo una volta inserita la stringa, o devo farlo prima?
    per questo ti conviene usare una stringa statica tipo char buffer[256]
    leggere con gets in buffer e poi con strlen() ti calcoli la dimensione dei caratteri inseriti allocando la giusta quantità di memoria.

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2002
    Messaggi
    143
    ok, quindi nel main leggo da buffer, poi però devo passare la stringa contenuta in buffer come parametro per una funzione. Lo metto normalmente nei parametri?

    es. void Funzione (int a, char buffer)

    e nel main la richiamo come Funzione(a,buffer)

    e, dopo aver letto la stringa, buffer lo devo svuotare, visto che potrà essere usato nuovamente da altre funzioni?
    Death to False Metal

  6. #6
    Utente di HTML.it L'avatar di Grunt
    Registrato dal
    Dec 2001
    Messaggi
    246
    void Funzione (int a, char *buffer)

    devi dichiarare la funzione così. Devi passare la stringa per indirizzo.

    nella funzione poi copi il contenuto nella stringa della struttura dopo averla allocata

  7. #7
    Utente di HTML.it
    Registrato dal
    May 2002
    Messaggi
    143
    per copiarla:

    Newp=malloc(sizeof(PROVA));
    Newp->stringa=malloc(n*sizeof(char));
    strcpy (newp->stringa, buffer);

    può andare?
    Death to False Metal

  8. #8
    Utente di HTML.it L'avatar di Grunt
    Registrato dal
    Dec 2001
    Messaggi
    246
    Si può andare!
    Se hai problemi posta pure

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 © 2026 vBulletin Solutions, Inc. All rights reserved.