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

    [C] inizializzare array di stringhe

    Salve a tutti,
    come da titolo mi serve qualche consiglio su come inizializzare un array di stringhe in maniera per così dire dinamica. Mi spiego: mi serve creare un array di stringhe da riempire tramite alcune stringhe passate da linea di comando... avendo mollato C anni fa mi trovo un po' in difficoltà dal momento che i miei ricordi sono confusi ma avevo pensato a una cosa del genere (che pero', ovviamente non funziona e va in segmentation fault appena inserisco la prima stringa).

    codice:
    #include <stdio.h>
    
    int main()
    {
    	int i=0; //contatore
    	int dim; //dimensione del vettore
    	char string[15]; //stringa passata in input
    	
    	printf("Inserisci il numero di elementi su cui lavorare: ");
    	scanf("%d", &dim);
    	char chiavi_ricerca[dim]; //genera il vettore che conterrà le stringhe
    	
    	for (i; i < dim; i++) {
    		printf("Inserisci la %d stringa da ricercare: \n");
    		scanf("%s", string);
    		chiavi_ricerca[i] = string;
    		printf("%s",chiavi_ricerca[i]);
    	} 
    	
    	return 0;
    }
    Se qualcuno puo' aiutarmi a capire dove sbaglio e come correggermi, gliene sarei grato

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Intanto

    char chiavi_ricerca[dim];

    è un vettore e non un array (le stringhe sono vettori in C, un insieme di stringhe sono vettori di vettori), ma la cosa più importante è che devi usare (a meno del discorso dello standard C99 su cui non mi soffermo) l'allocazione dinamica della memoria per il tuo array di stringhe.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    In effetti ci stavo pensando, anche se ricominciare a sbattere la testa su malloc etc. un po' mi preoccupa!

    Stavo pensando anche... e se usassi i puntatori? Dichiarare l'array in questa maniera:
    codice:
    char *chiavi_ricerca[dim];
    non equivale a dirgli che ogni posizione dell'array contiene il puntatore a un elemento di tipo char?
    In questa maniera, supponendo che dim abbia come valore 4 l'array dovrebbe indicizzare 4 diversi puntatori ognuno dei quali puo' essere fatto puntare a sua volta ad un elemento char, sbaglio?

  4. #4
    Ok, dopo qualche ricerca sull'allocazione dinamica ho risolto così:

    codice:
    #include <stdio.h>
    #include <string.h>
    
    int main()
    {
    	int i; //contatore
    	int dim_vett; //dimensione del vettore
    	int dim_string = 20; 
    	char **stringhe;
    	char string;
    	
    	printf("Inserisci il numero di elementi su cui lavorare: ");
    	scanf("%d", &dim_vett);
    	
    	printf("%d", dim_vett);
    	
    	stringhe = (char**)malloc(sizeof(char**) * dim_vett); //genera il vettore che conterrà le stringhe
    	
    	for (i=0; i < dim_vett; i++) {
    		stringhe[i]= (char*)malloc(sizeof(char *) * dim_string);
    		printf("\nInserisci la %da stringa da ricercare: ", i+1);
    		scanf("%s", &string);
    		strcpy(stringhe[i], &string);
    	}
    	
    	for (i=0; i < dim_vett; i++) {
    		printf("%s ", stringhe[i]);
    	} 
    	
    	return 0;
    }
    Sembra che funzioni correttamente ma se qualcuno potesse provare e dirmi se effettivamente va sarebbe meglio... solo una cosa, ora come faccio a liberare la memoria allocata da malloc quando non serve più? Ricordo che era una cosa che andava fatta ma la procedura nella mia testa è molto nebulosa

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.