|
Feri - izredni študij Feri - izredni študij
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
igor Administrator foruma
Pridružen/-a: 20.09. 2009, 17:22 Prispevkov: 192
|
Objavljeno: 18 Jan 2010 21:21 Naslov sporočila: malloc, realloc, free !!! NUJNO !!! |
|
|
Ojla,
kdo mi lahko na primerih razloži, kako se to uporablja??? Sem že obupan!!!
Poskušam tako, pa mi ne dela:
Koda: |
char *odzivLn;
odzivLn=(char*)malloc(sizeof(char));
|
potem berem znak po znak in ga dodajam v string pointer, pointer vsakič povečam za 1 byte (char)
Koda: |
while(odzivC!='\n')
{
nread=read(oprimek, &odzivC, 1);
(char)realloc(odzivLn,size+sizeof(char));
memcpy(odzivLn,&odzivC,1);
n++;
}
|
nato dodam še eno mesto za zaključek string \0 in še izpišem
(z "n" štejem koliko znakov sem že dobil)
Koda: |
(char)realloc(odzivLn,size+sizeof(char));
odzivLn[n]='\0';
printf("-%s\n",odzivLn);
|
Pa mi ne izpiše nič. S težkimi mukami in metodo "uzaludnih pokušajev" sem uspel vsaj to, da mi ne javlja več segmentation fault. |
|
Nazaj na vrh |
|
|
MilanG
Pridružen/-a: 16.01. 2010, 13:16 Prispevkov: 12
|
Objavljeno: 20 Jan 2010 07:39 Naslov sporočila: |
|
|
A das celo kodo, pa da sprobamo? |
|
Nazaj na vrh |
|
|
jani_k
Pridružen/-a: 21.01. 2010, 17:28 Prispevkov: 8
|
Objavljeno: 21 Jan 2010 17:49 Naslov sporočila: |
|
|
Tako na hitro, kaj je tisti "size"? Imas to kako spremenljivko, kjer hranis velikost tvojega polja? Ker sicer bi bilo pravilno sizeof(odzivLn)+sizeof(char).
Sicer pa, o tem sem se z asistentoma pogovarjal. Sem rekel, da bi jaz bral znak po znak in vsakic poveceval vmesnik za 1. Sta rekla, da je to potratno in da naj naredim en fiksni vmesnik (naprimer 100) in berem v vecjih kosih naenkrat.
Ne pozabit, da funkcija read vraca koliko je prebrala (v bytih). Kar zna bit koristno.
Edit: aja, probaj za vsak primer namesto s printf izpisat z write(1,&odzivLn, sizeof(odzivLn);
Ce je kaj not bo to sigurno izpisalo. Ce ne mas prazno. |
|
Nazaj na vrh |
|
|
igor Administrator foruma
Pridružen/-a: 20.09. 2009, 17:22 Prispevkov: 192
|
Objavljeno: 23 Jan 2010 21:35 Naslov sporočila: |
|
|
Evo ga, s tem testnim programčkom, ki sem si ga napisal (in v njem testiral) sem končno uspel skapirat.
Tako da če kdo potrebuje, izvolite example za malloc in realloc ter funkcijo, ki vrača string.
Koda: |
#include <sys/types.h>
#include <sys/socket.h>
#include <stdlib.h>
#include <netdb.h>
#include <stdio.h>
#include <netinet/in.h>
#include <string.h>
char *readline(int oprimek)
{
int n=0; /* število znakov*/
int size=0;/* velikost memory bloka*/
char odzivC;
char *odzivLn;
odzivLn=malloc(5);
strcpy(odzivLn,"test");
printf("V funkciji: %s\n",odzivLn);
odzivLn=realloc(odzivLn, strlen(odzivLn)+5);
printf("za realloc:\n");
strcat(odzivLn,"Test1");
printf("V funkciji 2: %s\n",odzivLn);
return odzivLn;
}
int main(int argc,char** argv) {
printf("%s\n",readline(0));
char *niz;
/*niz=malloc(1);*/
niz=readline(0);
printf("Izpisemo niz: %s\n",niz);
return 0;
}
|
|
|
Nazaj na vrh |
|
|
|
|
Ne, ne moreš dodajati novih tem v tem forumu Ne, ne moreš odgovarjati na teme v tem forumu Ne, ne moreš urejati svojih prispevkov v tem forumu Ne, ne moreš brisati svojih prispevkov v tem forumu Ne ne moreš glasovati v anketi v tem forumu
|
|