kimla Skrevet 6. mars 2006 Del Skrevet 6. mars 2006 (endret) #include <iostream> #include <windows.h> #include <time.h> using std::cout;using std::endl; int main(int argc, char *argv[]) { int i = 0; while( *argv[i] != '\0' ) { if( *argv[i] != 't' ) { cout << "Hey" << endl; } else { cout << "Ingen argumenter" << endl; } i++; } } Som tittelen sier, hvorfor runtime error? Er temmelig sikker på at det har med while-loopen og pekere, men er ikke helt 100 på dette her =/ Takker for svar Endret 6. mars 2006 av kimla Lenke til kommentar
genstian Skrevet 6. mars 2006 Del Skrevet 6. mars 2006 Et spørsmål: Hvorfor inkluderer du windows.h og time.h? Lenke til kommentar
Mokki Skrevet 6. mars 2006 Del Skrevet 6. mars 2006 (endret) For å indeksere argv så skriver du argv. Men hva vil du egentlig i programmet? argv[0] henter ut navnet på filen du kjørte. argv[1] henter ut første argument. Antall argumenter får du fra argc. Ved argv henter du altså ut hele argumentet som en *char. Det blir derfor feil å sammenligne med en enkelt char-verdi. Hvis du f.eks. vil sjekke at du har ett argument så kan du skrive noe sånt: if (argc != 2) { cout << "Wrong # of arguments!" << endl; exit(-1); } hotstian: du kunne vel svart på spørsmålet også. Endret 6. mars 2006 av Joy Toy Lenke til kommentar
kimla Skrevet 7. mars 2006 Forfatter Del Skrevet 7. mars 2006 (endret) Et spørsmål: Hvorfor inkluderer du windows.h og time.h? Hadde noe mer kode under som trengte det.. Ellers så har jeg funnet løsningen... : for(int i = 0; i < argc; i++) Var egentlig bare jeg som blingsa.. teit av meg.. menmen, må til det også Takker for svar. Endret 7. mars 2006 av kimla Lenke til kommentar
Peter Skrevet 7. mars 2006 Del Skrevet 7. mars 2006 main må returnere et tall. Typisk 0 om alt går riktig for seg. Lenke til kommentar
kjetil7 Skrevet 8. mars 2006 Del Skrevet 8. mars 2006 main må returnere et tall.Typisk 0 om alt går riktig for seg. 5714599[/snapback] Hvis du mener at koden mangler "return 0;" til slutt så er ikke det nødvendig da main automatisk vil returnere 0 hvis du ikke spesifiserer noe annet. Dette står beskrevet med klartekst i standarden og alle nyere kompilatorer støtter dette. Lenke til kommentar
Peter Skrevet 8. mars 2006 Del Skrevet 8. mars 2006 main må returnere et tall.Typisk 0 om alt går riktig for seg. 5714599[/snapback] Hvis du mener at koden mangler "return 0;" til slutt så er ikke det nødvendig da main automatisk vil returnere 0 hvis du ikke spesifiserer noe annet. Dette står beskrevet med klartekst i standarden og alle nyere kompilatorer støtter dette. 5718903[/snapback] Åja, det visste jeg faktisk ikke. Har dessverre ikke en kopi av standarden. Lenke til kommentar
kingkong Skrevet 8. mars 2006 Del Skrevet 8. mars 2006 (endret) Ved argv henter du altså ut hele argumentet som en *char. Det blir derfor feil å sammenligne med en enkelt char-verdi. Tull, hvis du leser koden og har en grunnleggende forståelse for pekere i C ser du at han derefererer denne pekeren, noe som vil gi tilbake den første char'en i stringen. Problemet her er at while-løkken ikke har noen fornuftig måte å terminere på, den vil fortsette til den treffer en null i minnet, eller havner utenfor programmets allokerte minneblokk (noe som vil gi en segfault). Endret 8. mars 2006 av kingkong Lenke til kommentar
kimla Skrevet 9. mars 2006 Forfatter Del Skrevet 9. mars 2006 Ved argv henter du altså ut hele argumentet som en *char. Det blir derfor feil å sammenligne med en enkelt char-verdi. Tull, hvis du leser koden og har en grunnleggende forståelse for pekere i C ser du at han derefererer denne pekeren, noe som vil gi tilbake den første char'en i stringen. Problemet her er at while-løkken ikke har noen fornuftig måte å terminere på, den vil fortsette til den treffer en null i minnet, eller havner utenfor programmets allokerte minneblokk (noe som vil gi en segfault). 5719512[/snapback] Nicely put Derfor jeg brukte argc til å telle istedenfor.. Lenke til kommentar
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å