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

Ukazatel na pole struktur – C / C++ – Fórum – Programujte.comUkazatel na pole struktur – C / C++ – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
gogulux0
Newbie
4. 8. 2008   #1
-
0
-

Jak udelam ukazatel na pole struktur ? Zkousel jsem trochu hledat, a nasel jsem jenom v C za pouziti mallock, jak se to dela pomoci new ?

//test.cpp

#include <iostream>
using namespace std;
int main()
{
struct Struktura
{
char retezec[20];
int cislo;
};

Struktura * ppole = new Struktura[5];

ppole[0].retezec = "neco";
cout << ppole[0].retezec;

delete [] ppole;

return 0;
}


prekladac me rika toto:
test.cpp:14: error: incompatible types in assignment of 'const char [5]' to 'char [20]'

Nahlásit jako SPAM
IP: 217.112.163.–
Reklama
Reklama
bukaj0
Věrný člen
4. 8. 2008   #2
-
0
-

gogulux
Ta alokace pomocí new je dobře. Problém nastane, přesně jak se píše v chybě, když se pokoušíš přiřazovat řětězec do pole charů na řádku 14. Napadají mě dvě řešení (přičemž vzhledem k pozním nočním hodinách, kdy tohle píši, možná, že existuje i nějaké lepší a jednodušší :o)):

1) Ponechat stávající strukturu a použít nějakou funkci na kopírování bloku paměti (strncpy(), memcpy(), memmove(), C++ moc dobře neznám, takže tam neporadím). Místo přiřazení tedy bude:


strncpy(ppole[0].retezec, "hello", strlen("hello"));


2) Použít union:
struct Struktura {

union {
char alokovany[20];
char *odkazovany;
} retezec;
int cislo;
}

ppole[0].retezec.odkazovany = (char *) "neco";
std::cout << ppole[0].retezec.odkazovany << std::endl;


První řešení zdá se jednodušší. Ale zase potom, pokud bude potřeba ukazovat na nějaká proměnlivá data, musela by se pořád kopírovat. Asi by také bylo k záhodno k tomu unionu přidělat „tag“, co je v něm uloženo.

Nahlásit jako SPAM
IP: 85.70.13.–
Jak se správně ptát? -> http://www.hash.cz/inferno/otazky.html[br][br] Po programování je člověk hladovej.
gogulux0
Newbie
4. 8. 2008   #3
-
0
-

To bukaj : Super diky

Nahlásit jako SPAM
IP: 217.112.163.–
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, 77 hostů

Podobná vlákna

Pole struktur — založil Kuba-$

Velikost pole struktur — založil Redby

AVR, C a pole struktur — založil DAEW

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ý