Passaggio di un array di stringhe a funzione

STL87
...continuo a stressarvi con il C...potete scrivermi la sintassi di una funzione che prende in ingresso un vettore di stringhe?giuro che sto uscendo fuori di testa...sarà djgpp, sarà windows ma il mio pc non vuole sentirne di farmi girare un listato...eppure ho provato tutte le possibilità
grazie come sempre...

Risposte
netarrow
eh il C è una brutta bestia.
qui hai un esempio semplice, il concetto è che un vettore di stringhe è un puntatore a puntatore a carattere: char**.
Quindi la funziona accetterà proprio un char**. Il secondo parametro (n) indica la dimensione dell'array di stringhe (quindi il numero di elementi char*).
L'esempio qui banalmente stampa delle stringhe.

#include <stdio.h>

#define LEN 5

void printstr(char** str, int n) {
     register int i;
     for(i = 0; i < n; i++) {
           printf("%s\n", str[i]);
     }
}

int main(void) {
    char* str[LEN];
    str[0] = "ciao";
    str[1] = "bau";
    str[2] = "miao";
    str[3] = "bla";
    str[4] = "prova";
    
    printstr(str, LEN);
    
    system("PAUSE");
    return 0;
}



ciao

enigmagame
"netarrow":
eh il C è una brutta bestia.

Perchè dici questo?

netarrow
è solo un modo di dire, riferita al fatto che ha molte gatte da pelare.
cioè come altro si poteva dire... uhm... "eh tosto il C", cioè per esprimere la mia comprensione alla frase "sto uscendo fuori di testa..." ;-)

STL87
"netarrow":
eh il C è una brutta bestia.
qui hai un esempio semplice, il concetto è che un vettore di stringhe è un puntatore a puntatore a carattere: char**.
Quindi la funziona accetterà proprio un char**. Il secondo parametro (n) indica la dimensione dell'array di stringhe (quindi il numero di elementi char*).
L'esempio qui banalmente stampa delle stringhe.

#include <stdio.h>

#define LEN 5

void printstr(char** str, int n) {
     register int i;
     for(i = 0; i < n; i++) {
           printf("%s\n", str[i]);
     }
}

int main(void) {
    char* str[LEN];
    str[0] = "ciao";
    str[1] = "bau";
    str[2] = "miao";
    str[3] = "bla";
    str[4] = "prova";
    
    printstr(str, LEN);
    
    system("PAUSE");
    return 0;
}



ciao


grazie mille...non avevo pensato al doppio puntatore...anche perchè la mia docente di programmazione non lo ha mai neanche accennato..

enigmagame
"netarrow":
è solo un modo di dire, riferita al fatto che ha molte gatte da pelare.
cioè come altro si poteva dire... uhm... "eh tosto il C", cioè per esprimere la mia comprensione alla frase "sto uscendo fuori di testa..." ;-)

No ma infatti scherzavo :D, ho capito il perchè l'hai scritto, ed è comunque vero all'inizio i problemi ci sono. Ma io lo adoro :D!

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.