Nashbar Skrevet 30. august 2009 Skrevet 30. august 2009 hei har en liten kodesnutt her jeg trenger forklaring på. hvorfor blir det slik at når jeg kjører dette programmet med * som første argument, blir ikke utskriften * men k istedet? jeg antar at det blir krøll med pekere her, men trenger litt god forklaring =) int main(int argc, char *argv[]) { cout << argv[1]<<endl; return 0; }
GeirGrusom Skrevet 30. august 2009 Skrevet 30. august 2009 Hvis du bruker Linux: Dette er en feature/bug i designet i UNIX. I UNIX systemer er det shellet som bytter om * og lignende med en liste over filene i mappen. Så hvis du skriver ut alle elementene i argv skal du få en liste over alle filene i mappen.
Nashbar Skrevet 30. august 2009 Forfatter Skrevet 30. august 2009 Urk! selvfølgelig, takk skal du ha =)
zotbar1234 Skrevet 30. august 2009 Skrevet 30. august 2009 Dette er en feature/bug i designet i UNIX. Fantastisk. POSIX-compliance for et shell er blitt en bug i UNIX nå.
GeirGrusom Skrevet 30. august 2009 Skrevet 30. august 2009 (endret) Feilen kommer opprinnelig fra UNIX, og er da følgelig også en del av POSIX. edit: og følgelig også i Linux. Endret 30. august 2009 av GeirGrusom
zotbar1234 Skrevet 30. august 2009 Skrevet 30. august 2009 Feilen kommer opprinnelig fra UNIX, og er da følgelig også en del av POSIX.edit: og følgelig også i Linux. "Feilen" ja. Flott.
GeirGrusom Skrevet 31. august 2009 Skrevet 31. august 2009 Hehe Er vel ikke en feil, men jeg synes det er et dårlig designvalg. Det hadde vært bedre om dette var en funksjon i programmeringsspråket fremfor at shellet gjør det. Et problem dette kan skape, er at dersom en lager en fil som heter -r (som er helt lovlig) og du deretter skriver rm * for å slette alle filene i mappen, så vil -r bli sett på som et programargument og ikke en fil, og dermed vil alle undermapper også bli slettet, men -r blir igjen. Er det en bug, eller en feature da?
zotbar1234 Skrevet 31. august 2009 Skrevet 31. august 2009 Et problem dette kan skape, er at dersom en lager en fil som heter -r (som er helt lovlig) og du deretter skriver rm * for å slette alle filene i mappen, så vil -r bli sett på som et programargument og ikke en fil, og dermed vil alle undermapper også bli slettet, men -r blir igjen. Er det en bug, eller en feature da? Ingen av delene -- dette er feil bruk av shellet. Den rette framgangsmåten er selvsagt å bruke 'rm ./*'. For å ikke snakke om alle måtene programmene ville ha ekspandert * feil på.
GeirGrusom Skrevet 31. august 2009 Skrevet 31. august 2009 Pøh, hvordan skal et program ekspandere * feil, hvis det hadde vært en systemkommando for å gjøre akkurat det?
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå