Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2007
    Messaggi
    4

    [C] malloc e Matrici di puntatori

    Ciao ragazzi, avrei bisogno di una matrice i cui elementi siano dei puntatori a char.
    La sua dimensione deve essere N righe * 3 col, dove N varia a seconda dell'input...
    Per allocare dinamicamente un vettore di N puntatori a char so che si fa cosi (se nn ricordo male):

    char** vett;
    vett = (char**) malloc( N * sizeof(char*) );

    bene.....ora per creare le righe (o colonne) ?.

    Grazie in anticipo a tutti coloro che mi risponderanno...:

  2. #2
    non dovresti allocare riga per riga ogni volta che aggiungi una stringa??

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2007
    Messaggi
    4
    ciao duo, grazie per l'interessamento.

    Non ho ben capito quello che vuoi dire, forse è probabile che tu creda che io abbia bisogno di una matrice di caratteri, cioè un carattere (un byte) per ogni elemento, ovvero un "char Mat[righe][colonne]"...
    No, a me serve una matrice i cui elementi contengano dei puntatori (4 byte) a char, cioè
    "char* Mat[r][c]", dove la dimensione delle righe "r" varia a seconda delle circostanze mentre quella delle colonne è nota, per me varrà 3;

    faccio un esempio per far capire quello che ne voglio fare di questa matrice.

    nel mio programma per N volte chiedo di inserire una "coppia" di parole, e mi farebbe comodo se potessi fare qlkosa del genere:

    for (i=0; i<N; i++) {

    printf("parola1:");
    scanf("%s", mat[i][0]);
    //parola1 va (cioè il suo puntatore) sulla i-sima riga e prima colonna

    printf("parola2:");
    scanf("%s", mat[i][1];
    //parola2 va sulla i-sima riga e seconda colonna

    //la terza colonna mi serve per altri valori che sono fortemente legati
    //alla coppia di parole
    }
    prorpio per il fatto che vengono inserite a coppia mi piacerebbe inserirle una di fianco all'altra in una matrice...

    cmq ho risolto (complicando un po il codice, ed una sua futura interpretazione) inserendole in un vettore di puntatori a char, per poi andarle a ripescare in una maniera meno elegante ma funzionante...

    francamente nn so neanke se sta matrice si puo creare dinamicamente (ma mi sembrerebbe strano) e se tu sai qlkosa mi faresti un grandissimo piacere...


  4. #4
    Certo che si può allocare dinamicamente. Per allocare un char *matrice[c][r] devi:

    codice:
    matrice = (char ***) malloc (c*r*sizeof (char *));
    Se cambia c o r devi riallocare l'intera struttura (perché deve essere contigua per definizione):

    codice:
    matrice  = (char ***) realloc (matrice, c*r*sizeof(char *));
    Però ho dei seri dubbi che il tuo scanf("%s", mat[i][0]) sia sano: quanto sopra alloca lo spazio per la matrice, non per le eventuali stringhe a cui punta ogni elemento della matrice.

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.