abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
dnes 17:25 | IT novinky

Do prodeje (Farnell) se dostal jednodeskový počítač Tinker Board (unboxing). Jedná se o konkurenci Raspberry Pi 3 od společnosti Asus. Porovnání (jpg) těchto počítačů například na CNXSoft. Cena Tinker Boardu je 55 £.

Ladislav Hagara | Komentářů: 2
dnes 14:44 | Zajímavý projekt

Byla zveřejněna pravidla hackerské soutěže Pwn2Own 2017, jež proběhne od 15. do 17. března v rámci bezpečnostní konference CanSecWes ve Vancouveru. Soutěžit se bude o více než milion dolarů v pěti kategoriích. Letos se bude útočit i na Ubuntu. Jedná se již o 10. ročník této soutěže.

Ladislav Hagara | Komentářů: 1
dnes 13:33 | Nová verze

Po sedmi měsících vývoje od vydání verze 5.7 byla vydána verze 5.8 (YouTube) toolkitu Qt. Z novinek lze zmínit například Qt Lite pro vestavěná zařízení. Nově jsou plně podporovány moduly Qt Wayland Compositor (YouTube) a Qt SCXML (YouTube). Současně byla vydána verze 4.2.1 integrovaného vývojového prostředí (IDE) Qt Creator.

Ladislav Hagara | Komentářů: 0
dnes 11:52 | Pozvánky

Lednový Prague Containers Meetup se koná ve čtvrtek 26. ledna 2017 od 18:00 v Apiary, Pernerova 49, Praha 8. Přijďte se podívat na přednášky o Enterprise Kubernetes a Jenkins as a code.

little-drunk-jesus | Komentářů: 0
dnes 11:40 | Pozvánky

Program letošního ročníku konference Prague PostgreSQL Developer Days, která se koná již 15. a 16. února 2017 na ČVUT FIT, Thákurova 9, Praha 6, byl dnes zveřejněn. Najdete ho na stránkách konference včetně anotací přednášek a školení. Registrace na konferenci bude otevřena zítra (24. ledna) v brzkých odpoledních hodinách.

TomasVondra | Komentářů: 0
včera 02:20 | Zajímavý článek

David Revoy, autor open source webového komiksu Pepper&Carrot nebo portrétu GNU/Linuxu, upozorňuje na svém blogu, že nový Inkscape 0.92 rozbíjí dokumenty vytvořené v předchozích verzích Inkscape. Problém by měl být vyřešen v Inkscape 0.92.2 [reddit].

Ladislav Hagara | Komentářů: 0
včera 02:02 | Komunita

Øyvind Kolås, hlavní vývojář grafických knihoven GEGL a babl, které využívá grafický program GIMP, žádá o podporu na Patreonu. Díky ní bude moci pracovat na vývoji na plný úvazek. Milník 1000 $, který by stačil na holé přežití, se již téměř podařilo vybrat, dalším cílem je dosažení 2500 $, které mu umožní běžně fungovat ve společnosti.

xkomczax | Komentářů: 12
21.1. 23:54 | Pozvánky

DevConf.cz 2017, již devátý ročník jedné z největších akcí zaměřených na Linux a open source ve střední Evropě, proběhne od pátku 27. ledna do neděle 29. ledna v prostorách Fakulty informačních technologií Vysokého učení technického v Brně. Na programu je celá řada zajímavých přednášek a workshopů. Letos je povinná registrace.

Ladislav Hagara | Komentářů: 0
21.1. 22:11 | Nová verze

Byla vydána verze 1.0.0 emulátoru terminálu Terminology postaveného nad EFL (Enlightenment Foundation Libraries). Přehled novinek v poznámkách k vydání.

Ladislav Hagara | Komentářů: 0
20.1. 17:00 | Nová verze

Byl vydán Docker 1.13. Přehled novinek na YouTube a v poznámkách k vydání na GitHubu. Docker umožňuje běh aplikací v softwarových kontejnerech (Wikipedia).

Ladislav Hagara | Komentářů: 7
Jak se stavíte k trendu ztenčování přenosných zařízení (smartphony, notebooky)?
 (11%)
 (2%)
 (73%)
 (3%)
 (10%)
Celkem 381 hlasů
 Komentářů: 31, poslední dnes 19:19
Rozcestník
Reklama

Dotaz: Pole retezcu v Cecku

26.9.2003 10:51 Tom
Pole retezcu v Cecku
Přečteno: 1817×
Zdravim,

da se prosim vytvorit nejakym zpusobem pole retezcu, pokud pri kompilaci nevim kolik prvku (radku) bude obsahovat ?

klasicky se definuje pomoci

napr char *p_text[4];

p_text[0]= "prvni"; p_text[1]= "druhy"; atd.

ale jak nadefinovat toto pole pokud nebudu znat pocet "radku" pole?

Tom

Odpovědi

26.9.2003 12:07 Dušan Merta | skóre: 3 | Trnávka
Rozbalit Rozbalit vše Pole retezcu v Cecku
Tohle by ti mohl pomoct:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define RADKY 5
#define DELKA 256
int main(void) {
  char **text;
  int i;
  
  /* Alokace pole. */
  text=(char **) malloc(RADKY*sizeof(char *));
  for (i=0; i<RADKY; i++)
    text[i]=(char *) malloc(DELKA*sizeof(char));
    
  /* Neco do nej dame. */
  strcpy(text[0], "prvni");
  strcpy(text[1], "druhy");
  
  /* Zkusime to vytisknout. */
  printf("%s", text[0]);
  
  /* Uvolneni pole. */
  for (i=0; i<RADKY; i++) free(text[i]);
  free(text);
  
  return(0);
}
Místo RADKY a DELKA můžeš mít libvolnou proměnnou typu int. Nezapomeň, že dvourozměrné pole musíš uvolňovat ve dvou krocích. Snad jsem to trefil, kdyžtak napiš mail.
26.9.2003 12:13 Maud Lebowski
Rozbalit Rozbalit vše Pole retezcu v Cecku
mas to asi spravne, ale on se ptal na to co delat kdyz neznas predem tu hodnotu RADKY. Zrejme bude treba to davat do tzv zasobniku, cili vytvorit strukturu s jednim ukazatelem na data a druhym na dalsi prvek:
typedef struct {
  char *radek;
  struct *radek;
} radek;
(ted si nejsem jisty syntaxi) a pak postupne pridavat prvky.. no a zpetne prochazeni taky bude horor... cili jednoducha funkce v C na to neexistuje, moznosti jsou: naprogramovat si to sam, pouzit C++ (asi nejlepsi volba) nebo pouzit nejaky script jazyk
26.9.2003 12:44 Dušan Merta | skóre: 3 | Trnávka
Rozbalit Rozbalit vše Pole retezcu v Cecku
Pokud se pocet radku meni v prubehu behu programu, tak je opravdu nejlepsi zasobnik, ale pokud pocet radku neni znam v dobe komilace, ale pri behu se jednou urci, napriklad takto:
printf("Zadej pocet radku: ");
scanf("%d", &radky);
tak pak muj priklad funguje, staci misto RADKY napsat radky:
/* Alokace pole. */
  text=(char **) malloc(radky*sizeof(char *));
  for (i=0; i<radky; i++)
    text[i]=(char *) malloc(DELKA*sizeof(char));
a je to jednodussi.
BTW:
typedef struct {
  char *retezec;
  radek *dalsi;
  radek *predchozi;
} radek;
Tohle resi docela dobre zpetne prochazeni a je to myslim dobre.
26.9.2003 13:21 Maud Lebowski
Rozbalit Rozbalit vše Pole retezcu v Cecku
jo lze to libovolne komplikovat napriklad hledanim ve vyvazenych b stromech..:-) jinak me ale jste napadla jedna vec kterou pozuivam kdyz nejde o moc dat a hodi se s nima pracovat jako s polem (typicky zpracovani dat ve fortranu), pak lze pouzit pole tak, ze se nejprve naplni 2 prvky, kdyz to nestaci tak se 2 prekkopiruji do 4 prvkoveho pole, kdyz ani to ne, tak se prekopiruje 4 prvky a vytvori 16 atd... velmi sikovne a rychle, bohuzel trochu zrout pameti..:-), ale v tomto pripade, kdy by se alokovalo jen 4byte pole ukazatelu na stringy je to urcite lepsi nez se drbat se zasobnikem
Josef Kufner avatar 26.9.2003 13:43 Josef Kufner | skóre: 66
Rozbalit Rozbalit vše Pole retezcu v Cecku
typedef struct {
  char *retezec;
  radek *dalsi;
  radek *predchozi;
} radek;

by melo byt:

typedef struct s_radek {
  char *retezec;
  struct s_radek *dalsi;
  struct s_radek *predchozi;
} radek;
Protoze radek neni tou dobou jeste deklarovan, ale struct s_radek jiz ano.
Hello world ! Segmentation fault (core dumped)
26.9.2003 14:06 unchallenger | skóre: 69 | blog: unchallenger
Rozbalit Rozbalit vše Pole retezcu v Cecku
Stejně je to vynalezání kola... (tedy, na něčem se člověk to C naučit musí, že...) Ale když chci obousměrně linkované seznamy a všechny možné funkce s nimi operující, vystačím si s #include <glib.h> (stejně tak, když chci jednosměrné seznamy, hashe, stromy, resizující se pole, etc.)
26.9.2003 12:13 sam
Rozbalit Rozbalit vše Pole retezcu v Cecku
pokial viem, v c-cku neexistuju datove typy, ktore by si sami regulovali velkost podla potreby. uz aj ten tvoj priklad je podla mna troska nepresny.

ja by som to robil takto:
char **p;
p = (char **)malloc(pocet_riadkov * sizeof(char *));
p[0] = (char *)malloc(velkost_retazca * sizeof(char));
p[1] = (char *)malloc(velkost_retazca * sizeof(char));
...

26.9.2003 13:00 unchallenger | skóre: 69 | blog: unchallenger
Rozbalit Rozbalit vše Pole retezcu v Cecku
Neexistují je silné slovo, nejsou přímo součástí jazyka, nicméně vše lze doprogramovat ;-) několik takových struktur je třeba v glib. gcc umožňuje int foo(int n) { char *p[n]; ... }, ale standardní C bohužel ne. Jinak je třeba použít malloc/alloca...
28.9.2003 12:12 ApoC
Rozbalit Rozbalit vše Pole retezcu v Cecku
A nebo v C++ pouzit vektor :o)
28.9.2003 12:32 unchallenger | skóre: 69 | blog: unchallenger
Rozbalit Rozbalit vše Pole retezcu v Cecku
A bude se to kompilovat půl hodiny... ;-)
CIJOML avatar 28.9.2003 16:58 CIJOML | skóre: 58 | Praha
Rozbalit Rozbalit vše Pole retezcu v Cecku
A to vadi? Dulezita je konecna funkcnost
28.9.2003 17:14 unchallenger | skóre: 69 | blog: unchallenger
Rozbalit Rozbalit vše Pole retezcu v Cecku
Jo, vadí. Velké projekty v C++ se [s gcc] kompilují tak dlouho, že dřív umřeš, než něco vyvineš, takže na žádnou konečnou funkčnost nedojde... (a to i s ccache, protože preprocesování se tím nezbavíš, a než se načte pár STL hlaviček, můžeš si s klidem skočit na oběd).
28.9.2003 17:25 Beda
Rozbalit Rozbalit vše Pole retezcu v Cecku
... to jsem tak jednou kompiloval s g++ orbit a par veci okolo. no a dopadlo to tak, ze pro nedostatek pameti a swapu (dohromady >1G) to neuneslo par regulernich daemonu a byly odporouceny na smrt => g++ uz se uz nejmenuje g++ a g++ nedela to co se obvykle od g++ ocekava. vzivote uz si nelajznu kompilovat cokoliv v g++ na tom serveru (je desne nenazrany) a kdybych to omezil pod paricnou mez, tak by to stejne slitlo pri kompilaci, takze je to na $#%^@#

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267   www.czech-server.cz
© 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.