PDA

View Full Version : GROSSO dubbio puntatore a char?!?!


Piojolopez2406
03-02-2007, 19:06
sto avendo grossi problemi con i puntatori a char....praticametne devo assegnare da tastiera gli elementi di un vettore di stringhe definito come puntatore a char quindi:

inizializzo

char *insieme1[50];


ora con un ciclo for vojo assegnare ad uno ad uno gli elementi...ma come? ho provato in tutti i modi...
l'ultimo ke ho provato era questo:
char *pinsieme1[100];
n=4;

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

printf("elemento: %d: ",pinsieme1);//vojo leggere l'indirizzo
scanf("%s",&pinsieme1[i]);
pinsieme1++;
}


ma ovviamente di da un problema nell'ultima riga del for.
sto perdendo la testa nn riesco proprio a trovare il modo di fare girare sto stupido programma.

grazie ragazzi...ho un esame in settimana vi prego aiutatemi
:mc:

h1jack3r
03-02-2007, 23:05
char *insieme1[50];


char *pinsieme1[100];
n=4;

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

printf("elemento: %d: ",pinsieme1);//vojo leggere l'indirizzo
scanf("%s",&pinsieme1[i]);
pinsieme1++;
}



fai un puntatore a char...non puoi fare una scanf %s....dovrai fare una getch() cosė scrivi in memoria una stringa e la sporchi...
ora sono un po' arrugginito con il C, comunque quel vettore di puntatori a caratteri punta a 4 diverse locazioni in memoria, in ognuna puoi scrivere un carattere diverso, ma non puoi scriverci una stringa! Se nella stringa scrivi solo un carattere č ok...ma se una volta eseguito scrivi pių caratteri sei fregato.
e pinsieme++ č sbagliato
l'indirizzo non i serve leggerlo..guarda le variabili dal debugger.

for(i=0;i<n;i++)
{
scanf("%s",&pinsieme1[i]);

}

se mi ricordo bene cosė dovrebbe andare.

andbin
04-02-2007, 10:02
La questione principale č che dichiarando una variabile:

char *insieme1[50];

si crea un array di 50 puntatori a char e basta. Non viene allocato alcun spazio per le stringhe vere e proprie.
Prima di prendere in input una stringa bisogna quindi allocare dello spazio per ogni singola stringa (ad esempio con la funzione malloc) e poi a quel punto usare scanf.

Piojolopez2406
04-02-2007, 11:24
quindi praticametne come dovrebbero essere le linee di codice?

Piojolopez2406
04-02-2007, 11:56
finalmente cosė mi gira...
l'unica cosa ke vojo capire....il numero 20 ke ho messo nel malloc cosa mi fa realmente???

{
int n,m,i,j;
char *pinsieme1[40];

n=4;
for(i=0;i<n;i++)
{
pinsieme1[i]=malloc(20*sizeof(char));

}



for(i=0;i<n;i++)
{
scanf("%s",pinsieme1[i]);

}


for(i=0;i<n;i++)
printf("%s\n",pinsieme1[i]);

Piojolopez2406
04-02-2007, 12:55
il tutto a me serve pčer realizzare questo esercizio:
Algoritmo per il calcolo dell’unione di due insiemi di stringhe. Un insieme di stringhe deve essere rappresentato con un array di puntatori a char. Nei tre test usare 2 insiemi di almeno 15 e 20 stringhe, 25 e 30 stringhe, 35 e 40 stringhe....

andbin
04-02-2007, 14:03
finalmente cosė mi gira...Sė, cosė č ok ... salvo il fatto che si dovrebbe testare il risultato della malloc e alla fine si dovrebbe fare una free delle aree di memoria allocate.

l'unica cosa ke vojo capire....il numero 20 ke ho messo nel malloc cosa mi fa realmente???Il parametro della malloc indica quanti byte di memoria allocare. Nel tuo caso hai chiesto alla malloc di allocare 20 byte, dal momento che sizeof(char) ritorna tipicamente 1.

il tutto a me serve pčer realizzare questo esercizio:
Algoritmo per il calcolo dell’unione di due insiemi di stringhe. Un insieme di stringhe deve essere rappresentato con un array di puntatori a char. Nei tre test usare 2 insiemi di almeno 15 e 20 stringhe, 25 e 30 stringhe, 35 e 40 stringhe....Quindi, dovresti unire due insiemi di stringhe, cioč dati due array di stringhe ne devi ottenere uno che contiene tutte le stringhe.