Visualizzazione dei risultati da 1 a 8 su 8

Discussione: array di stringhe [C]

  1. #1

    array di stringhe [C]

    Ciao ragazzi ho un problema,praticamente devo creare un vettore nel quale inserire delle parole immesse dall'utente. Qui sotto il codice.

    codice:
    int main (int argc, char* argv[]) {
    
    char **stringa;
    int cont,k;
    
    printf("Quante parole vuoi inserire?");
    scanf("%d",&cont);
    
    stringa = (char**) malloc (sizeof(char*) * cont); 
    
    
    for(k=0;k<cont;k++){
    		
    		printf("inserire parola:" );
    		scanf("%s",&stringa[k]);
    	
    }
    l'errore che mi da dopo aver inserito le parole è di Exception: STATUS ACCESS VIOLATION.... che ha a che fare con la memoria credo. Qualcuno mi sa dire che errore c'è? grazie.

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Dopo che hai creato il puntatore al vettore di puntatori, prima di usare tali puntatori, devi allocare lo spazio per ogni stringa.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Ho fatto cosi:

    codice:
    int main(int argc, char* argv[]){
    
    char **stringa; 
    char swap[15];
    int cont,k;
    
    printf("Quante parole vuoi inserire?");
    scanf("%d",&cont);
    
    stringa = (char**) malloc(sizeof(char*) * cont); 
    
    for(k=0;k<cont;k++){
    
    	printf("inserire parola: ");
    	scanf("%s",&swap);
    	
    		stringa[k] = malloc(sizeof(char) * strlen(swap));
    		
    		stringa[k] = swap;
    }
    
    for(k=0;k<cont;k++){
    
    
    	printf("%s\n",stringa[k]);
    
    
    }
    Quell'errore non me lo da piu,pero ora quando vado a stampare le parole, mi stampa tot volte solo l'ultima che ho inserito...

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320

    Moderazione

    Quando si posta del codice, si devono usare i tag CODE. Vedi Regolamento interno, punto 6.

    Correggo io.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  5. #5
    ah grazie..non lo sapevo

    non è che sapresti anche la risposta al mio problema?

  6. #6
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    È lo stesso problema riscontrato in questa discussione, anche se il programma è un po' diverso. Risolvi così:

    codice:
                    ...
    		stringa[k] = malloc(sizeof(char) * strlen(swap));
    		
    		strcpy(stringa[k], swap);
    }
    ...
    si dovrebbe usare la strncpy() ma vabbè...
    every day above ground is a good one

  7. #7
    grazie ora funziona, mi sapresti dire perchè prima non funzionava?

  8. #8
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    Se provi a leggere quella discussione che ti ho linkato, forse riesci a capirlo da solo. E' un problema di indirizzi... in pratica tu vai a modificare ogni volta la stringa contenuta all'indirizzo di memoria di "swap" con la lettura da tastiera, e poiché questo indirizzo è lo stesso che assegni ad ogni "stringa[k]" alla fine si ritroveranno tutte a puntare alla stessa area di memoria con la stessa stringa (stringa che è l'ultima che hai scritto, perché è l'ultima modifica di quell'area di memoria che hai fatto). Con una copia invece il discorso cambia... ogni "stringa[k]" ha come valore un indirizzo ad una certa area di memoria allocata e nella quale tu vai a copiare il valore di "swap" letto ad ogni iterazione.

    In realtà, comunque, per come era fatto il programma nella sua prima versione non c'era nemmeno bisogno di allocare spazio per ogni singola "stringa[k]", bastava allocare spazio per "cont" puntatori...
    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 © 2025 vBulletin Solutions, Inc. All rights reserved.