Gå til innhold

Hvorfor gir dette runtime error?


Anbefalte innlegg

#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 av kimla
Lenke til kommentar
Videoannonse
Annonse

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 av Joy Toy
Lenke til kommentar
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 av kimla
Lenke til kommentar
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
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
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 av kingkong
Lenke til kommentar
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

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...