🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.c
Article #786

Re: argv

#786
From: Michal Malecki
Date: Mon, 26 Jan 1998 12:43
56 lines
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-mail
References: <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