Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2010
    Messaggi
    14

    problema allocazione dinamica stringa in C

    Salve,
    sono nuovo del forum e non li frequento molto, quindi scusate se faccio qualche errore.
    Ho un problema con un programma in C.
    questo è il codice:
    codice:
    int dim,i;
     char *s=NULL; 
    char d[100]; 
    puts("inserisci grnadezza della stringa"); 
    scanf("%d",&dim); 
    s=(char *)malloc((dim*sizeof(char))+1); 
    puts("inserisci stringa"); 
    scanf("%s",s);
     puts(s); 
    puts("inserire d"); 
    gets(d); 
    printf("%s",d); 
    free(s); 
    system("PAUSE"); 
    return 0; }
    dopo aver visualizzato correttamente la stringa s, viene visualizzato "inserire d" e dopo di che il programma termina senza rispettare il gets() successivo. questo accade solo se effettuo allocazione dinamica della memoria. Se non la effettuo tutto procede nel modo esatto.
    Inoltre se inserisco gets(s), al posto di scanf("%s",s), il programma non mi fa immettere la stringa s e salta alla richiesta della stringa d.

    Mi scuso ancora se ho commesso qualche errore nel postare il problema.

    Grazie in anticipo.

  2. #2
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    Solito, noto, irrisolto problema del buffer dello stream di input che rimane "sporco"... se ne è parlato tantissime volte qui sul forum, se fai una ricerca troverai sicuramente una spiegazione. Puoi risolvere così

    codice:
    ...
    scanf("%s", s);
    while (getchar() != '\n');
    ...
    lasciando invariato tutto il resto.
    every day above ground is a good one

  3. #3
    Utente di HTML.it
    Registrato dal
    Aug 2010
    Messaggi
    14
    ti ringrazio, ho risolto il problema.

    Ho provato a cercare ma non avevo trovato nulla.
    Grazie ancora.

  4. #4
    Utente di HTML.it
    Registrato dal
    Aug 2010
    Messaggi
    14
    Per chi avesse lo stesso problema, può essere risolto anche con un

    fflush(stdin);


  5. #5
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    Soluzione non ottimale, il comportamento di fflush() su stdin non è definito dallo standard, quindi in alcune implementazioni potrebbe non risolvere il problema. È ad esempio il caso della glibc sotto Linux: se provi a compilare con gcc un programma che abbia fflush(stdin) come rimedio per la pulizia del buffer, non otterresti alcun risultato. Sotto Linux si può ricorrere a __fpurge(stdin) includendo stdio_ext.h, ma è una soluzione ancora meno portabile di fflush(). Il while invece è un rimedio più universale e pulito.
    every day above ground is a good one

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