PDA

Visualizza la versione completa : [C] Acquisizione di caratteri e memorizzazione in un nuovo spazio


maverik90000
07-01-2011, 12:19
Buona sera ragazzi, avrei bisogno di capire come mai questo semplice programma non mi funziona , allora spiego brevemente , io voglio prendere da un array presente nel main un tot di caratteri e metterli in un nuovo spazio per l'appunto appo, poi vorrei riaggiornare il valore a cui punta appo per vedere cosa stampa insomma per vedere se ha caricato correttamente quei 4 valori. Vi ringrazio in anticipo per ogni aiuto.




int main()
{
char prova[200];
char *code[]= {"0","10","11000","11001","110100000",
"110100001","110100010","110100011",
"110100100","110100101","110100110",
"110100111","110101000","110101001",
"110101010","110101011","110101100",
"111","110101101","110101111","110110000",
"110110001","110110010","110110011",
"110110100","110110101"
};
char bs[] = {"0101110110000110010101110"};
decode(code,bs);
}

char *decode(char *code[], char *bs)
{
int i=4,j=0;
char *punta,*appo;
appo=punta;
for (j=0; j<i; j++) //per caricare appo
{
appo= (char *)malloc(sizeof(char));
*appo=*bs;
bs++;
appo++;
}
appo=punta;
j=0;
while(*(appo+j) != 0) {
printf("%c",*(appo+j));
++j;
}
}



mille grazie per ogni aiuto

shodan
07-01-2011, 12:51
Da quel che vedo direi che non hai capito come funzionano i puntatori.


char *punta,*appo;
appo=punta;

punta e appo con quell'assegnamento puntano alla stessa spazzatura. Che senso ha?


for (j=0; j<i; j++) //per caricare appo
{
appo= (char *)malloc(sizeof(char));
*appo=*bs;
bs++;
appo++;
}

Qui crei un char ad appo (tramite malloc), lo assegni e infine lo perdi. appo++ è un errore.


appo=punta;

altro errore. Assegni al puntatore appo la spazzatura del puntatore punta.


while(*(appo+j) != 0) {
printf("%c",*(appo+j));
++j;
}

e visto che appo contiene spazzatura, stamperai spazzatura.
E infine non liberi la memoria.
Quel che devi fare è creare lo spazio per appo *prima* del ciclo for, ed eventualmente usare punta per scansionare l'array. Ma non devi mai toccare appo. appo lo userai solo come segnaposto per malloc e free.

maverik90000
07-01-2011, 13:04
ciao, questo intendevo , magari non hai capito quello che intendevo


char *decode(char *code[], char *bs)
{
int i=4,j=0;
char *punta,*appo;
appo= (char *)calloc(i+1,sizeof(char));
punta = appo;
for (j=0; j<i; j++) //per caricare appo
{
*appo=*bs;
bs++;
appo++;
}
appo=punta;
j=0;
while(*(appo+j) != 0) {
printf("%c",*(appo+j));
++j;
}
return appo;
}

shodan
07-01-2011, 13:30
Tu avevi scritto questo:


char *decode(char *code[], char *bs)
{
int i=4,j=0;
char *punta,*appo;
appo=punta;
for (j=0; j<i; j++) //per caricare appo
{
appo= (char *)malloc(sizeof(char));
*appo=*bs;
bs++;
appo++;
}
appo=punta;
j=0;
while(*(appo+j) != 0) {
printf("%c",*(appo+j));
++j;
}
}

e questo io ho commentato.
Se intendevi quello che hai scritto adesso, perché non l'hai scritto prima? :confused:

maverik90000
07-01-2011, 13:37
è perche ora leggendo su un forum ho capito dove sbagliavo ^^ questo funziona

Loading