Registrace nového uživatele     Návod     Kluby     Archív  Lopuchu     Lopuch.cz  

Něco navíc v zeleném?
A proč ne...

Lopuch.cz

Jméno:
Heslo:
Podpora LCD:
 
Archiv klubu C, C++ [ŽP: neomezená] (kategorie Programování) moderuje Šéf Lopuchu.

Články

Jak bezpečně ukončit vlákno z DllMain
FastAllocPool - urychlení častých alokací a dealokací
Akce a zpráva jako objekt
Tuply v C++
Efektivní alokátor malých objektů a tady druhý a třetí díl
Šablony: Být vládce kvalifikátorů
Vracíme z funkce objekty
Základy komunikace mezi procesy (ve Windows)
Multiple Interface a Instance Factory
Multithreading v C++ (ve Win32)
  Nastavení klubu     Nastavení práv     Homepage     Anketa     Přítomní     Oblíbené     Lopuch     Kategorie  
autor: 
text: 
vyplnit a 
Help
   
[ 280 ] <Novější  <<<Nejnovější  Nejstarší>>>  Starší>  
trofozoit Trofozoit DNA, DNA - come out and play 7.2.2005 20:22  268
Kdokoliv: Ale bylo mi nenápadně doporučeno hledat štěstí jinde ;) To není moc hezký na to že se ho učím teprve asi tři dny ;) Ale to je jedno..

ad tvůj příklad, ano chápu jak se deklarují proměnné různými způsoby,
pochopím co dělá int * pointer; pokud bude někde dál taky pointer = &neco;, ale bez toho druhého řádku je to pořád jen deklarace a přiřazování nevidím, jak psal Bredy, poiter musí někam ukazovat.. jediný další řádek kde se pString objevuje je pString = (char *) GlobalLock(hGlobal); což se klidně přiznám, že pokud je přiřazení adresy tohle, tak bych to nepoznala.

Jinak protože budu potřebovat pracovat s řetězci, zkoušela jsem si o nich něco najít, většinou se s nimi líp pracuje jako třídou string, ale předpokládám, že tahle "nástavba" se zase nedá nacpat do toho clipboardu "jen tak", přecejen vyžaduje detailnější práci s pamětí, takže (hádám..)je pravděpodobnost se tam bude přesouvat spíš v původním céčkovém (bez plusek) zápisu řetězců, který nápadně vypadá jako onen char * neco; (ve skutečnosti by to taky měl být ukazatel na sekvenci znaků). Vyplývá z toho opravdu to co si myslím nebo ne? :)
kdokoliv Kdokoliv Nevidím důvod dělat cokoliv bezdůvodně. - http://kkl2401.wz.cz 6.2.2005 14:47  267
AL3X: Kdyz to spustis takhle, tak to bude fungovat, jenom pokud Ti tam nekde pobezi bash nebo neco podobnyho. :-) Na winech je to spis muj_program.exe %PATH%. Jo, to Ti samozrejme nahradi. Procento se escapuje dvema procentama (kdyby to byla Tva dalsi otazka. :-))
al3x 6.2.2005 14:25  266
A precejen, napsat si tu funkci na parsovani tak, aby spravne zpracovavala i backslashovany znaky, (o wild-cardech ani nemluve) neni prace na 5minut.
Jak je to vlastne s promennymi? Co kdyz spustim treba 'muj_program.exe $PATH'? Nahradi mi tam aspon tu promennou?? To uz snad jo, ne?

To, ze kazdy program musi mit sam v sobe funkcionalitu, ktera preparsovava parametry znamena, ze se (jako uzivatel) nemuzu spolehnout na to, jak se to bude presne chovat. To je dalsi neprijemnost.

BTW: A pokud budu chtit programu predat nejakou vetu nebo radku textu, tak je mnohem rozumnejsi pozivat STDIN. A kdybych mel potrebu to delat pres parametry, tak neni problem mu to predat jako jeden dlouhej parametr.
kdokoliv Kdokoliv Nevidím důvod dělat cokoliv bezdůvodně. - http://kkl2401.wz.cz 6.2.2005 10:56  265
Ender: Nerozparsovanou command line nikdy nepotrebujes, protoze projet pole argv od zacatku do konce a slepit si to dohromady je trivialita. V Unixu pochopitelne muzes poslat v ramci jednoho parametru uvozovky, muzes tam poslat naprosto libovolny znak. To je prave rozdil v moznostech shellu na Unixu a na Windows, unixovy shell dela totiz vubec spoustu zajimavych a uzitecnych veci, nez posle parametry programu.
Ano, copy-paste funguje, neprijemne je, kdyz si tam po pul roce najdes chybu (nebo to chces nejak vylepsit), totez se tyka kostry (jo a ne kazdy pouziva VS.NET, byt takovehle veci funguji asi v kazdem IDE).
To uz je spis na napsani knihovny, kterou budes vzdycky linkovat.
ender Ender 6.2.2005 10:47  264
K tem parametrum - dovedu si predstavit pripad, kdy je naopak parsovani parametru na skodu (potrebuji v parametrech predat radku textu a pokud mam nejake slovo v uvozovkach, tak uz se jich nikdy nedohledam). Nejak to neresim - jsou proste dva mozne pristupy (parsovat - neparsovat), to ze jeden z nich je _obvykle_ pro programatora pouzitelnejci, nerika nic o tom, ze by byl ten druhy pristup vylozene spatny. Zrovna v tomhle pripade by to parsovani bylo zbytecne a na skodu :o).

Vzydycky si tam preci muzu tu funkci na parsovani copy-pastnout (pokud ji jednou napisu), pripadne si ji dat rovnou do templatu VS.NET, aby se mi tam hazela pri vygenerovani zakladni kostry programu wizardem. (Kdo by furt psal to same, ze? :))

Stejne tak bych ale ocekaval, ze pod *nixem (a vubec vsude, kde je to rozparsovane), budu mit v nejake forme pristup k nerozparsovane command line. Pokud ne, tak to povazuji za "uchylne" :o)
kdokoliv Kdokoliv Nevidím důvod dělat cokoliv bezdůvodně. - http://kkl2401.wz.cz 5.2.2005 23:55  263
Bredy: Ted Ti nejak nerozumim - co si predstavujes pod takovou hodnotou? Ja teda aspon na pointery nahlizim tak, ze obsahuji hodnotu - jenom tou hodnotou je shodou okolnosti adresa.
Je-li tomu tak (ty __argc a __argv), tak je to rozumne. Prislo mi totiz nesmyslne, aby si kazdy programator to lpCmdLine parsoval sam, nehlede na to, ze to nemusi byt zrovna jednoduche (pokud lpCmdLine neobsahuje ty uvozovky, tak je to dokonce nemozne, pokud je obsahuje, tak vznika nejednoznacnost ohledne uvozovek v nazvu souboru, pokud ovsem Windows uvozovky v nazvu souboru uplne nezakazuji, to ja nevim, na Unixu to pouzit lze).
bredy 5.2.2005 23:37  262
Kdokoliv 249lpCmdLine obsahuje celý příkazový řádek od prvního znaku za jménem spustitelného souboru (exe) až na konec.

V MSVC lze i ve WinMain použít nedokumentované proměnné __argc a __argv, které obsahují jednotlivé parametry, tak jak jsme v C zvykly. V případě uvozovek se pak uvozovky odstraňují a to co bylo v uvozovkách se považuje za jeden parametr (i když obsahuje mezeru)
bredy 5.2.2005 23:32  261
KdokolivA ještě nezapomeň uvést, že pointer není hodnota. Aby pointer mohl fungovat, musí někam ukazovat. A v tom je zásadní problém, která dělá začátečníkům problémy.

Trf:

Buď musí ukazovat na jinou proměnnou, nebo musí ukazovat na místo jenž vytvořil překladač (to je většinou případ, když se deklaruje pole), nebo se to místo vytvoří až za běhu programu, k čemuž slouží v C++ new ( a v C malloc).
kdokoliv Kdokoliv Nevidím důvod dělat cokoliv bezdůvodně. - http://kkl2401.wz.cz 5.2.2005 22:04  259
Trofozoit: Za vola Te nikdo nepovazuje, ale je videt, ze s C nemas moc zkusenosti a priznejme si, ze to neni uplne jazyk, kde by se k vysledku snadno dalo dojit pomoci nejakych pokusu a omylu.
int * pointer; // toto rika, ze deklarujes promennou pointer typu ukazatel na int
int * pointer = &neco; // toto rika, ze deklarujes promennou pointer typu ukazatel na int a zaroven ji prirazujes adresu promenne neco
int * pointer;
pointer = &neco; // tyto dva radky delaji totez, co ten nad tim.
trofozoit Trofozoit DNA, DNA - come out and play 5.2.2005 21:53  258
AL3X: Fajn, ukazatel, vím. Ale char není konkrétní proměnná, ale typ proměnné, ne? Takže to zdánlivě připomíná deklaraci pointeru, ale i tak tam něco chybí. (nebo se to tak možná zapisuje, já se dostala s pointery nejdál jak se do nich zapisuje adresa něčeho tímto způsobem: int * pointer = &neco ; takže absence nějakého rovnítka mě pořád trochu mate )

Ostatní: Dík za důvěru ;) Ano před dvěma dny jsem netušila že C++ často pracuje přímo s odkazy v pamětí ale každý den je plný překvapení. Kvůli tomu nemusím být za vola, za lamu klidně, ale za vola ne, to je pro mě jako biologa dost rozdíl ;)
kdokoliv Kdokoliv Nevidím důvod dělat cokoliv bezdůvodně. - http://kkl2401.wz.cz 5.2.2005 19:34  257
Nebo na Javu, ze? :-) Co takhle ale Delphi - Pascal je celkem jednoducha vec a jeho retezce nejsou tak ocividny pointery jako v C/C++?
vlaho 5.2.2005 17:58  256
Nebo přejdi rovnou na C#, tam už se pointery nevyskytují :-).
mpts mpts Je to jinak, ba přesně naopak! 5.2.2005 16:37  255
Trofozoit: "*" většinou tak nějak spojuje řetězce -- Řekni někomu, ať Ti to napíše, nebo to zkus v nějakém vyšším jazyce, lze-li to; C není jazyk pro Tebe. :-))
al3x 5.2.2005 15:09  254
TrofoHvezdicka jsou 'ukazatele' (pointery).
Takze
char * pString;
rika, ze promenna pString bude pointer na misto v pameti, kde je ulozeny char. Nevim, jestli je to srozumitelny a jak hluboko to potrebujes vysvetlit..
trofozoit Trofozoit DNA, DNA - come out and play 5.2.2005 13:33  253
Jo, to byste nevěřili, jak je otravný neustále přepisovat i krátký sekvence DNA, když potřebujete vědět jak by vypadal opačný řetězec (v databázích je obvykle jen jeden a když ho tam máte najít opačně je to hrůza) ;)

No ještě k tomu kódu, tak nějak jsem většinu rozluštila, až na ten řádek
char * pString;
(a i trochu ten další co obsahuje taky pString), není mi jasný, co vlastně dělá.. "*" většinou tak nějak spojuje řetězce, ale tady není nic čemu by se to přiřadilo, žádný "něco=", nebo se pletu? Tak co to vlastně znamená? (že by nějaký převod..?)
Jinak ty věci psané velkým písmem, chápu dobře že v podstatě zastupují třeba int nebo tak, nějaký typ definice? Který jsou nejspíš popsané někde v těch includech protože nejdou zrovna najít :)

[ 280 ] <Novější  <<<Nejnovější  Nejstarší>>>  Starší>  

(c) 2001-2011 Lopuch.cz   
Kontakt