Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2006
    Messaggi
    75

    [C] Copiare stringhe in un array

    Ho visto che ci sono molti post sugli array di stringhe però nessuno fa al caso mio, dunque ecco il mio problema.

    Devo copiare in un array di stringhe , delle stringhe passate in input ; a dirla così sembra facile ma ho qualche problema.

    questo è il codice che ho scritto:

    codice:
    #include <stdio.h>
    main() {
    
    	int i, j;
    	char str[128]; 
    	char *array[128];
    
    	for (i=0; i<5; i++) {
    		printf("inserisci stringa\n");
    		scanf("%s", str);
    		array[i] = str;
    	}
    	for (j=0; j<5; j++) 
    		printf("%d\t%s\n", j, array[j]);
    }
    immettendo in input le stringhe (in ordine) : "primo", "secondo", "terzo", "quarto", "quinto"
    l'output che ottengo è questo:
    codice:
    0       quinto
    1       quinto
    2       quinto
    3       quinto
    4       quinto

    ho capito che il problema è nella stringa "di appoggio" str , infatti se creo 5 stringhe di appoggio distinte il problema non si verifica e ottengo proprio quello che volevo, cioè:
    codice:
    0       primo
    1       secondo
    2       terzo
    3       quarto
    4       quinto
    purtroppo non posso percorrere questa strada, perchè a priori non so quante sono le stringhe da salvare (in quanto è l'utente dell'applicazione che decide quando fermarsi) e quindi non posso creare un numero che non conosco di variabili.

    Come posso risolvere ? Grazie

  2. #2
    ti dico dove sbagli, tu prova a risolvere
    codice:
    #include <stdio.h>
    
    int main() {
    
    	int i, j;
    	char str[128]; 
    	
            /* 
                     è un array di 128 puntatori a char
                     ma ogni puntatore in questo momento
                     non punta a niente
             */
            char *array[128];
    
    	for (i=0; i<5; i++) {
    		printf("inserisci stringa\n");
    		scanf("%s", str);
    		array[i] = str;
      /* 
              ok l'elemento i-esimo di array è stato posto uguale a str 
              quindi punta a str.
              Ma una stringa non si copia così, prima va allocato lo spazio
              poi vanno usate le funzioni tipo strcpy
      */
    	}
     /* i primi 5 elementi di array puntano alla stessa stringa str */
     /* e qundi tutti alla ultima assegnazione */
    	for (j=0; j<5; j++) 
    		printf("%d\t%s\n", j, array[j]);
    
    /* questo ci deve essere sempre */
      return (0);
    }

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2006
    Messaggi
    75
    sono ancora un pivello a programmare in c, potrei sapere come andava fatto? Grazie

  4. #4
    Per ogni stringa allochi lo spazio opportuno e poi copi byte per byte, in quello spazio, dallo spazio originale.

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2006
    Messaggi
    75
    Originariamente inviato da menphisx
    Per ogni stringa allochi lo spazio opportuno e poi copi byte per byte, in quello spazio, dallo spazio originale.
    non so come fare , come si alloca lo spazio opportuno, non basta fare una definizione delle variabili?

  6. #6
    codice:
    #include <stdio.h>
    #include <stdlib.h>
    
    #define STRING_SIZE 128
    #define NUMBER_OF_STRINGS 5
    
    int main(void) {
    
    	int i, j;
    	char str[STRING_SIZE]; 
    	
            /* 
                     è un array di NUMBER_OF_STRINGS puntatori a char
                     ma ogni puntatore in questo momento
                     non punta a niente
             */
            char *array[NUMBER_OF_STRINGS];
    
    	for (i=0; i < NUMBER_OF_STRINGS; i++) {
    
    		if((array[i] = malloc(STRING_SIZE * sizeof(char)) == NULL){
    
    				puts("Errore allocazione memoria");
    				exit(EXIT_FAILURE);
    
    		}
    
    		printf("inserisci stringa\n");
    		scanf("%s", array[i]);
    
      /* 
              ok l'elemento i-esimo di array è stato posto uguale a str 
              quindi punta a str.
              Ma una stringa non si copia così, prima va allocato lo spazio
              poi vanno usate le funzioni tipo strcpy
      */
    	}
     /* i primi 5 elementi di array puntano alla stessa stringa str */
     /* e qundi tutti alla ultima assegnazione */
    	for (j=0; j < NUMBER_OF_STRINGS; j++) {
    
    		printf("%d\t%s\n", j, array[j]);
    		free(array[j]);
    
    	}
    
    /* questo ci deve essere sempre */
    	return 0;
    
    }

  7. #7
    Utente di HTML.it
    Registrato dal
    Feb 2006
    Messaggi
    75
    grazie ma purtroppo non funziona ,

    eseguendolo, questo è l'output:

    codice:
    inserisci stringa
    ciao
    inserisci stringa
    inserisci stringa
    inserisci stringa
    inserisci stringa
    0       (null)
    1       (null)
    2       (null)
    3       (null)
    4       (null)
    "ciao" è la prima e unica stringa che mi permette di inserire.


    edit: ho trovato il problema, invece che:
    codice:
    if((array[i] = (char *)malloc(STRING_SIZE*sizeof(char))==NULL)) {
    
    				printf("Errore allocazione memoria");
    				abort();
    
    		}*/
    ho sostituito semplicemente
    codice:
    array[i] = (char *)malloc(STRING_SIZE*sizeof(char));
    certo non ho il controllo su un eventuale fallimento della malloc , però funziona correttamente.

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.