Article View: pl.comp.lang.c
Article #786Re: argv
From: Michal Malecki
Date: Mon, 26 Jan 1998 12:43
Date: Mon, 26 Jan 1998 12:43
56 lines
2673 bytes
2673 bytes
Sebastian Tylko <seba@bobo.ds5.agh.edu.pl> wrote:
: Qrczak wrote:
:> main (int argc, char *argv[])
:> {
:> ...
:> Czy teraz wolno zmieniać zawartość argv[][] (nie zwiększajšc
:> bieżšcej długości), czy też parametry wywołania sš zmiennymi tylko do
:> odczytu?
:>
: Tak
Alez kolega jest stuprocentowo pewny. Ja nie robilbym tego na jego miejscu.
Wyjasnie wiec dokladnie na czym sprawa polega.
Gdyby main'a zadeklarowac w ten sposob:
int main( int argc, const char ** const argv );
To zmienic niczego w argv NIE WOLNO.
Poniewaz jednak programisci nie stosuja takich naglowkow, wiec... wolno.
Wszystko tez zalezy od tego, JAK chcesz zmieniac argv. Bo argv jest po prostu
zmienna typu 'char**' w zwiazku z czym zluzy jednie do tego, zeby do niej
zostal wpisany odpowiedni wskaznik (przekazywany do funkcji). Tak tez nic
nie stoi na przeszkodzie, by po prostu na nowo przydzielic mu tablice
dwuwymiarowa itd.
Wystrzegalbym sie jednak dokonywania modyfikacji w tablicy drugiego poziomu,
a juz ABSOLUTNIE w tablicy pierwszego poziomu! Intuicyjnie do tego podchodzac,
tablica ta moze (i pewnie jest) tworzona w ten sposob:
argv = new char* [argc];
nazwa par1 par2 par3
| ^| ^| ^| ^
| 0| 0| 0| 0
| | | |
[0] | | |
[1]---' | |
[2]--------' |
[3]-------------'
Prosze zwrocic uwage: w miejsce spacji wstawiane sa zera, a nastepnie wskazniki
w tablicy drugiego poziomu sa wypelniane adresami poczatkow tych napisow.
Jezeli jest to tak robione, to w zasadzie nie stoi nic na przeszkodzie, zeby
przypisac tym elementom inne adresy, ale proba uzycia np.
strcat( argv[2], "cos" );
moze byc BARDZO przykra w skutkach (z SIGSEGV wlacznie).
--
.---. . . - Michal Malecki <mmalecki@technologist.com>/The things that
\___ ,-. | , |- ,-. ,- mUd: zly.mud.org.pl 4000. /can't destroy you
\ |-' |< | | | | uRl: www.kis.p.lodz.pl/~sektor /make you
`---' `-' ' ` `' `-' ' pGp: sektor@zly.kis.p.lodz.pl /stronger...
Technical Details
Message-ID:
<6ai0d1$npt@polonez.man.lodz.pl>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!pingwin.icm.edu.pl!news.icm.edu.pl!uw.edu.pl!ict.pwr.wroc.pl!news.man.lodz.pl!not-for-mailReferences:
<Pine.LNX.3.96.980118170312.17197A-100000@qrnik.knm.org.pl> <34C52653.659DFF65@bobo.ds5.agh.edu.pl>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!pingwin.icm.edu.pl!news.icm.edu.pl!uw.edu.pl!ict.pwr.wroc.pl!news.man.lodz.pl!not-for-mail From: Michal Malecki <sektor@zly.kis.p.lodz.pl> Newsgroups: pl.comp.lang.c Subject: Re: argv Date: 26 Jan 1998 12:43:13 GMT Lines: 56 Message-ID: <6ai0d1$npt@polonez.man.lodz.pl> References: <Pine.LNX.3.96.980118170312.17197A-100000@qrnik.knm.org.pl> <34C52653.659DFF65@bobo.ds5.agh.edu.pl> NNTP-Posting-Host: sektor@zly.kis.p.lodz.pl Mime-Version: 1.0 User-Agent: tin/pre-1.4-980105 (UNIX) (SunOS/5.5.1 (i86pc)) Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit