PDA

Visualizza la versione completa : [c] array di stringhe tramite puntatori


mirkul
03-02-2013, 20:29
Ciao a tutti ho provato a cercare dappertutto ma non lo riesco a trovare da nessuna parte!!
come si inizializzano e si dichiarano gli array di stringhe

io vorrei fare un array i cui elementi sono delle stringhe!

questi sono i passaggi che avevo in mente io:

1) l'utente immette il numero di elementi di cui e' formato l'array principale definiamolo come ArrayP.

2) tramite un ciclo inserisce la dimensione di ogni elemento dell'array principale

3) inserisce la stringa nell'elemnto creato!

4) controlla che e' stata inserita in maniera corretta!

io ho provato a scriverlo cosi, solo che se ci metto dimensione 1 e poi ci vado a scrivere una parola di 2000 caratteri me la legge comunque come me mai dove sbaglio??

mi potete dre una mano??
grazie mille ciao!



#include <stdio.h>
#include <string.h>
#include <stdlib.h>

/* definizione della funzione main */
int main(int argc, const char * argv[])
{/**/
/* dichiarazione delle variabili locali */
int n;
int i;
int d = 0;
char *b;

b = (char*)calloc(d, sizeof(char));

/* acqusizione delle formule */
printf("Inserisci il numero totale degli elemnti dell'arrayprincipale:\n");
scanf("%d", &n);
for (i=0; i<n; i++) {
printf("dimensione di ogni elemento[%d]??\n", i);
scanf("%d", &d);
//for (j=0; j<d; j++) {
printf("inserisci l'elemento[%d]:\n", i);
scanf("%s", b);
printf("l'elemento inserito e': %s\n", b);

//}
}

printf("Arrivederci\n");
return 0;
}

Automatik
03-02-2013, 20:36
All' interno del secondo for metti

do{
printf("inserisci l'elemento[%d]:\n", j);
scanf("%s", b);
}
while(strlen(b)>d);
strlen sta per string length ed una funzione che ritorna la lunghezza della stringa

mirkul
03-02-2013, 21:00
mi continua a dare dei problemi....

questo e' l'output:
Inserisci il numero totale degli elementi:

2
dimensione dell' elemento[0]??
5
inserisci l'elemento[0]:
alessandro
inserisci l'elemento[0]:
ciao
inserisci l'elemento[1]:
andrea
inserisci l'elemento[1]:
cane
inserisci l'elemento[2]:
forse
inserisci l'elemento[3]:
fare
inserisci l'elemento[4]:
male
maledimensione dell' elemento[1]??

oregon
03-02-2013, 21:07
Con questa

b = (char*)calloc(d, sizeof(char));

dato che d 0, non creerai altro che un problema di accesso in memoria.

Per un array di stringhe, prevedi un "puntatore doppio a char" e alloca un numero di "puntatori a char" pari al numero di stringhe da memorizzare.

Poi, utilizza una stringa allocata con una dimensione abbastanza grande per l'input e infine, alloca lo spazio per questa stringa con uno dei puntatori dell'array precedente e copiaci la stringa.

Pi facile a farsi che a dirsi.

mirkul
03-02-2013, 21:12
scusami, ma non ho capito benissimo, non e' che mi potresti scrivere qualcosa??
l'unica cosa che ho capito e' di fare una cosa del genere:


int main(int argc, const char * argv[])
{/**/
/* dichiarazione delle variabili locali */
int n;
int i;
int d;
char **b;
int j;

b = (char**)calloc(d, sizeof(char));

Marco1995
03-02-2013, 21:31
Ciao..intendeva dire una cosa di questo tipo:


int main(int argc, const char * argv[])
{/**/
/* dichiarazione delle variabili locali */
int quante,lunghezza;
int j;
int i;

char **b;


cout << "Quante parole vuoi inserire? ";
cin >> quante;
b = (char**) calloc(quante,sizeof(char*));
for (int i =0;i<quante;i++)
{
cout << "Dimmi la lungezza della " << i <<" parola ";
cin >> lunghezza;
b[i] = (char*) calloc(lunghezza+1,sizeof(char));
}
}

Loading