.[ ČeskéHry.cz ].
kopirovani dynamicke array
Jdi na stránku 1, 2  Další
 
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> C / C++
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
Aroidzap



Založen: 14. 11. 2011
Příspěvky: 68

PříspěvekZaslal: 9. červenec 2012, 14:26:38    Předmět: kopirovani dynamicke array Odpovědět s citátem

Ahoj, nasel by se nekdo kdo by mi pomohl to nejak prepsat at mi to jede? Smile

kód:

struct ABC{
   char *jmeno;
};

void string_copy(char *source, char *destination)
{
   unsigned int i=0;
   while(source[i]!=0) //nulovy znak
   {
      destination[i]=source[i];
      i++;
   }
   destination[i]=0; // pridani nuloveho znaku na konec
}

void funkce_s_array(ABC **arr)
{
   char *buffer;

   nacist_neco_do_bufferu();

   while(1)
   {
      string_copy(buffer,arr[i]->jmeno);
   }
}

int main()
{
   ABC *arr;

   funkce_s_array(&arr); // zde mam referenci at mi to array vyplivne upravenou

   // tady potrebuju mit nactene veci v "arr" a dal s nimi manipulovat


   return 0;
}


Naposledy upravil Aroidzap dne 9. červenec 2012, 20:10:16, celkově upraveno 1 krát
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Weny Sky



Založen: 28. 07. 2007
Příspěvky: 241

PříspěvekZaslal: 9. červenec 2012, 14:50:26    Předmět: Odpovědět s citátem

kód:

void funkce_s_array(ABC **arr)
{
   char *buffer;

   nacist_neco_do_bufferu();

   *arr = new ABC[x];

   for(int i=0;i<x;i++) //x muze byt ruzne, jeho hodnota se nacita az za behu
   {
      const size_t len = strlen(buffer);
      (*arr)[i].jmeno = new char[len+1];
      memcpy((*arr)[i].jmeno, buffer, len+1);
   }
}


+- ... ale radeji si precti neco o ukazatelich
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Aroidzap



Založen: 14. 11. 2011
Příspěvky: 68

PříspěvekZaslal: 9. červenec 2012, 14:56:48    Předmět: Odpovědět s citátem

ukazatele mi delaji porad problemy snazim se to pochopit jak to jde... asi jsem na to jeste moc malej Very Happy Very Happy Very Happy

jinak tohle je sice dobre, ale mam to usporadane trochu jinak (snazil jsem se to tu zestrucnit).. takze nebudu proste vedet kolikrat se ten for loop zopakuje mam tam while, kterej se za urcitych podminek breakne

napada me akorat tomu dat vzdycky nejakou rezervu a kdyztak to proste resizovat ale prijde mi to takove "neohrabane"
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Weny Sky



Založen: 28. 07. 2007
Příspěvky: 241

PříspěvekZaslal: 9. červenec 2012, 19:56:39    Předmět: Odpovědět s citátem

Zkus jednou nebo dvema jednoduchyma vetama popsat co vlastne chces udelat.

zadne detaily, slozitosti, ...
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Aroidzap



Založen: 14. 11. 2011
Příspěvky: 68

PříspěvekZaslal: 9. červenec 2012, 20:11:14    Předmět: Odpovědět s citátem

nevim jak to zjednodusene popsat... upravil jsem puvodni post.. zitra to zkusim jeste nejak vysvetlit... mam v tom zmatek, navic jak mi to haze errory z kterych moc nechapu
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
pcmaster



Založen: 28. 07. 2007
Příspěvky: 1827

PříspěvekZaslal: 10. červenec 2012, 08:35:34    Předmět: Odpovědět s citátem

Dufam, ze si si vedomy, ze jazyk C ma na manipulaciu s C "stringami" hotove, standardizovane, kniznicne funkcie?
_________________
Off-topic flame-war addict since the very beginning. Registered since Oct. 2003!
Interproductum fimi omne est.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Aroidzap



Založen: 14. 11. 2011
Příspěvky: 68

PříspěvekZaslal: 10. červenec 2012, 09:08:26    Předmět: Odpovědět s citátem

nakonec jsem to vyresil pres vektor, a ano, o stringu vim, ale tohle je cast kodu kde mi jde o rychlost zpracovani

Naposledy upravil Aroidzap dne 10. červenec 2012, 09:28:09, celkově upraveno 1 krát
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
rezna



Založen: 27. 07. 2007
Příspěvky: 2156

PříspěvekZaslal: 10. červenec 2012, 09:09:52    Předmět: Odpovědět s citátem

Aroidzap napsal:
nakonec jsem to vyresil pres vektor


muzes poslat kod, kde kopirujes ten 'char*' pres vector? - a hlavne teda duvod proc to delas by me zajimal

kdyz jsou funkce strcpy, strcat (a milion dalsich strXXX funkci na praci s char*)
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
if.then



Založen: 13. 04. 2008
Příspěvky: 579

PříspěvekZaslal: 10. červenec 2012, 10:13:00    Předmět: Odpovědět s citátem

Pošli ten kód, první verze je naprostá nehoráznost, kdy je ABC neinicializovaný ukazatel na objekt s neinicializovaným ukazatelem jmeno (o dalším se radši ani nebudu zmiňovat). Jestli ta nová verze vypadá obdobně, budeš mít velké problémy, když ti občas program začne házet segmentační chyby (tzn. přistupuješ k adrese ukazatele, která není platná a nemáš k ní přístup).

Pokud nepochopíš práci s ukazateli, nikdy se nemůžeš stát programátorem v C/C++. Ukazatele jsou v nich dost klíčové. Osobně jsem taky ukazatele nechápal, dokud jsem se je nenaučil z Teach yourself C++ in 21 days (český překlad je Naučte se C++ za 21 dní, jak jinak). Samozřejmě ukazatelích nestačí jenom povrchový tutoriál, ale musíš opravdu "srdcem" vědět, jak se kdy zachovají a jak to funguje.

Jinak obcházení kopírování C stringů přes C++ vektor je opravdu nešťastné řešení. Akceptovatelná řešení jsou:
1. str(n)cpy - vyžaduje pochopení C ukazatelů a polí, ale je to asi nejrychlejší alternativa a je pure C
2. vlastní kopírovací funkce podobná str(n)cpy - vyžaduje velmi velké porozumění C ukazatelům a polím, nejpracnější varianta, ve které po čase můžeš objevit chyby (a to dost zásadní, i blbý přístup za hranice pole ti může zkazit paměť (anglický termín "memory corruption" je asi trefnější) a pak to hledáš týden, protože nevíš, co to způsobilo), zase to může být pure C
3. použít std::string, tam potřebuješ rozumět C++ Standard Library, ale to zase není tak hrozné. Pokud píšeš C++, tak je to nejlepší volba.
_________________
For guns and glory, go to www.ceske-hry.cz.
For work and worry, execute VC++.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Aroidzap



Založen: 14. 11. 2011
Příspěvky: 68

PříspěvekZaslal: 10. červenec 2012, 10:47:18    Předmět: Odpovědět s citátem

to kopirovani stringu nemam pres vektor, ve vektoru mam tu strukturu ABC.

mam dalsi dotaz... jak mam pouzit delete na

kód:
std::vector<ABC> abc_array[1000];


predpokladam ze

kód:
for (int i=0;i<1000;i++)
{
     delete[] abc_array[i];
}


je blbost


jinak dekuju za vsecky rady Wink


Naposledy upravil Aroidzap dne 10. červenec 2012, 11:07:08, celkově upraveno 1 krát
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
mar



Založen: 16. 06. 2012
Příspěvky: 610

PříspěvekZaslal: 10. červenec 2012, 11:02:59    Předmět: Odpovědět s citátem

To, cos napsal ty, je pole, které obsahuje 1000 vektorů (=dyn. polí).
Myslím, žes chtěl tohle:
kód:

std::vector<ABC> array(1000);

delete[] je v tomto případě blbost. std::vector se maže sám v destruktoru.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Aroidzap



Založen: 14. 11. 2011
Příspěvky: 68

PříspěvekZaslal: 10. červenec 2012, 11:08:12    Předmět: Odpovědět s citátem

ne, je to spravne chtel jsem 2d array ktera je napul array na pul vektor Wink
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
rezna



Založen: 27. 07. 2007
Příspěvky: 2156

PříspěvekZaslal: 10. červenec 2012, 11:12:14    Předmět: Odpovědět s citátem

na co delete? - vzdyt tam nikde nemas pointery - takze se to uvolni samo

ale jinak prosimte otevri si knihu o C/C++ a zacni nekde od zacatku - mas zasadni mezery a brzo shoris jako papir
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
mar



Založen: 16. 06. 2012
Příspěvky: 610

PříspěvekZaslal: 10. červenec 2012, 11:12:45    Předmět: Odpovědět s citátem

V tom případě se omlouvám. Takže akorát nedeletovat. Je to statické pole a vektor se v tomto případě smaže sám.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Aroidzap



Založen: 14. 11. 2011
Příspěvky: 68

PříspěvekZaslal: 10. červenec 2012, 11:14:51    Předmět: Odpovědět s citátem

no ale kdyz ho chci smazat (ne na konci programu) a uvolnit tim pamet, tak to udelam jak?
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Zobrazit příspěvky z předchozích:   
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> C / C++ Časy uváděny v GMT + 1 hodina
Jdi na stránku 1, 2  Další
Strana 1 z 2

 
Přejdi na:  
Nemůžete odesílat nové téma do tohoto fóra
Nemůžete odpovídat na témata v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete hlasovat v tomto fóru


Powered by phpBB © 2001, 2005 phpBB Group


Vzhled udelal powermac
Styl "vykraden" z phpBB stylu MonkiDream - upraveno by rezna