Dynamicke 2rozmerne pole – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

Dynamicke 2rozmerne pole – C / C++ – Fórum – Programujte.comDynamicke 2rozmerne pole – C / C++ – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
light_c_programator
~ Anonymní uživatel
11 příspěvků
26. 3. 2014   #1
-
0
-

Zdravim vsetkych!

Chcel by som vas poprosit o pomoc s tymto problemom:

majme 2 rozmerne dynamicke pole definovane povedzme takto:

char **pole2D = NULL;

potom:

for (x = 0; x < i; x++){
            fgets(priezvisko_meno, 51, *f);
            pole2D[x] = (char*) malloc(strlen(priezvisko_meno) * sizeof(char));
            pole2D[x] = priezvisko_meno;
            fgets(ulica, 51, *f);
            fgets(domova_dan, 10, *f);
            fgets(odvoz_odpadu, 8, *f);
            fgets(datum, 10, *f);
            fgets(prazdny_riadok, 3, *f);
        }

Preco, ked si necham vypisat pole2D[x] v ramci cyklu je tam spravny retazec, ale po skonceni cyklu su na vsetkych X rovnake retazce?

for (x = 0; x < i; i++)
        {
            printf("%s", pole2D[i]);
        }

povedzme ze mam subor s 10 menami(i = 10). nacitam ich, alokujem pre ne pamat, ale vypise sa mi len 10x posledne meno...

Vdaka za rady a vysvetlenie

Nahlásit jako SPAM
IP: 188.167.242.–
Reklama
Reklama
light_c_programator
~ Anonymní uživatel
11 příspěvků
26. 3. 2014   #2
-
0
-

*len oprava chyb co som napisal

Preco, ked si necham vypisat pole2D[x] v ramci cyklu je tam spravny retazec, ale po skonceni cyklu su na vsetkych pole2D[X] rovnake retazce?

for (x = 0; x < i; i++)
        {
            printf("%s", pole2D[x]);
        }

Nahlásit jako SPAM
IP: 188.167.242.–
Romeritton0
Newbie
26. 3. 2014   #3
-
0
-

Lebo priezvisko_meno je typu char*, teda pointer. Ty síce alokuješ pamäť pre string veľkosti priezvisko_meno, ale nakoniec tam uložíš pointer, pretože v C string vlastne neexistuje, iba pole charov a pole sa vo väčšine prípadov správa ako pointer.

Použi teda funkciu strcpy (http://www.tutorialspoint.com/…n_strcpy.htm).

Nahlásit jako SPAM
IP: 176.101.176.–
light_c_programator
~ Anonymní uživatel
11 příspěvků
26. 3. 2014   #4
-
0
-

Vdaka, uplne presne si to trafil.

*navyse teraz uz viem, ze pole[10] = "string" nie je retazec, ako som sa to ucil ale pole charov 

Nahlásit jako SPAM
IP: 188.167.242.–
hlucheucho+10
Posthunter
27. 3. 2014   #5
-
0
-

Přesněji: řetězec je jeden ze způsobů použití pole typu char.

hu

Nahlásit jako SPAM
IP: 195.178.67.–
light_c_programator
~ Anonymní uživatel
11 příspěvků
27. 3. 2014   #6
-
0
-

a ked mam 2rozmerne pole ako parameter funkcie napr.

void funkcia (FILE **f, char **pole2D){

alokuje a naplnim pole2D

}

ako ho pouziijem v inej funkcii?  napr.

void vypis(char **pole2D){

vypis pole2D

}

Lebo nejak mi to nefunguje,  ani ak zmenim void funkcia na char funkcia a dam return **pole2D a potom toto pole chcem vypisat v ine funkcii, stale mi to pise, ze pole2D je prazdne...

Nahlásit jako SPAM
IP: 188.167.242.–
Romeritton0
Newbie
27. 3. 2014   #7
-
0
-

Popravde som nepochopil otázke, ale tvoj kód nie je validný už len preto, že ak chceš mať dvojrozmerné pole ako parameter, musiš v predpise uviesť jeden rozmer.

Viac napr. tu http://stackoverflow.com/…arameters-in

Nahlásit jako SPAM
IP: 176.101.176.–
light_c_programator
~ Anonymní uživatel
11 příspěvků
27. 3. 2014   #8
-
0
-

#7 Romeritton
Tomu rozumiem, malo by to byt asi takto pole2D[][X], ale ja tie rozmery dopredu neviem, viem ich az po vykonani prikazov vo funkcii

z toho mi asi jedina moznost vychadza, v prvej funkcii kde pole alokujem a nacitavam donho prvky len ako lokalnu premennu predavat ho cez return?

proste ide mi o to, ze mam funkciu, v ktorej si definujem 2rozmerne pole, neskor mu alokujem pamat, nacitam don data a potrebujem ho predat inej funkcii, samozrejme s datami v nom

Nahlásit jako SPAM
IP: 188.167.242.–
z
~ Anonymní uživatel
268 příspěvků
27. 3. 2014   #9
-
0
-

return nebo další ukazatel

void init1(char ***pole)
{
	char **p = ...
	*pole = p;
}

char ** init2()
{
	char **p = ...
	return p;
}

void vypis(char **pole)
{
	...
}

char **pole1, **pole2;

init1(&pole1);
pole2 = init2();

vypis(pole1);
vypis(pole2);
Nahlásit jako SPAM
IP: 88.101.8.–
light_c_programator
~ Anonymní uživatel
11 příspěvků
27. 3. 2014   #10
-
0
-

#9 z
*** pole je uz pre mne prilis komplikovane, ak mi nieco funguje/nefunguje tak uz ani netusim preco a zvrhava sa to len na tu pridam hviezdicku a skusim spustit/tu odoberem a skusim spustit...

s tou druhou moznostou sa uz hram asi 2h, ale este som neprisiel nato co a ako...

Nahlásit jako SPAM
IP: 188.167.242.–
light_c_programator
~ Anonymní uživatel
11 příspěvků
27. 3. 2014   #11
-
0
-

update nahradil som funkcia(&subor, &pocetzaznamov) na naplnanie pola  tvojou verziu pole2 = funkcia(&subor, &pocetzaznamov) a uz  mi to funguje, teraz len v com je rozdiel medzi funkcia(&subor, &pocetzaznamov) a pole2 = funkcia(&subor, &pocetzaznamov)?

Nahlásit jako SPAM
IP: 188.167.242.–
light_c_programator
~ Anonymní uživatel
11 příspěvků
27. 3. 2014   #12
-
0
-

uz som vsetko pochopil  

Nahlásit jako SPAM
IP: 188.167.242.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 172 hostů

Podobná vlákna

Dynamicke pole — založil george6565

Dynamicke pole — založil Earl Cash

Ne/dynamicke pole — založil cecilconrad

Dynamicke pole na string — založil mustafa

C# dynamické pole - chyba — založil Alex

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032016 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý