Gå til innhold

Anbefalte innlegg

Trenger litt utdjupning på hvordan disse fungerer. Sålangt har jeg lest litt ifra denne tutorialen.

 

Cprogramming

 

Her står det at argc er argument count, altså nummeret på annal argumenter og at argv er en liste / array over argumentene. Disse blir da passert til programmet fra kommando linjen (!?)

 

Jeg har også fått med meg at argv[0] er navnet og plasseringen til .cpp fila.

Der står også at argc burde være 2 for at programmet skal være riktig kjørt. Hvorfor det? Trenger bitte litt hjelp her.

 


int nNumArgsIgnored = (argc - 3);
   if (nNumArgsIgnored > 0) {
       cerr << nNumArgsIgnored << " extra argument" <<
               (nNumArgsIgnored == 1 ? "" : "s") << 
               " ignored.  FYI." << endl;

 

Og hæ? hva vil dette si? for og skjønne koden trenger jeg først og fremst og skjønne hvordan argc og argv funker.

 

Vil være evig takknemlig om noen gidder å hjelpe til å forstå dette.

Lenke til kommentar
Videoannonse
Annonse

Vel, jeg kan ikke c særlig godt, men kan forsøke å forklare på grunnlag av mine python kunnskaper.

 

Ettersom argv[0] alltid er kommandoen brukt for å kjøre fila (eller cppfila i c?), vil argc alltid være minst én. Viss du kjører programmet med to parametere (program.exe --hallo --hallo), vil argc være 3 pga at hvert parameter legger til en key i arrayet. Viss du da har 3 argument, vil lengden på argc være 4. Sia (argc -3) == (4-3) == 1, vil if-testen slå til (fordi 1 > 0).

Lenke til kommentar

$ myprogram -abc -def

 

argc = 3

argv[0] = myprogram

argv[1] = -abc

argv[2] = -def

 

litt kode så skjønner du det lett

int main(int argc, char **argv)
{
 int i=0, c=argc-1;
 printf("argc: %d\n",argc);
 for ( i=0; i<=c; i++ ) { 
   printf("argv[%d]: %10s\n",i,argv[i]); 
 }
 return 0;
}

Endret av charlie di meola
Lenke til kommentar

Hm, har en merkelig feil her.

 


#include <iostream>
#include <winsock.h>
#include <cstdlib>
#include <cstdio>

using namespace std;

int main(int argc, char *argv[]) {
   
   cout << "Number of args: " << argc << endl;
   
   for(int i = 0; i < 2; i++) {
           cout << "Arg: " << argv[i] << endl;
           }
           
           
           
   struct hostent *h;

   if (argc != 2) {  // error check the command line
      cerr<< "ERROR commandline arguments!";
      exit(1);
      }

      if ((h=gethostbyname(argv[1])) == NULL) {  // get the host info
         cerr << "gethostbyname!";
         exit(1);
         }

       cout << "Host name: " << h->h_name;
       cout << "IP Address : " << inet_ntoa(*((struct in_addr *)h->h_addr));
      
      return 0;
   } 

 

 

Hvorfor i h***** f*** funker ikke dette?? Bruker kommandolinja og skriver test.exe andreas

 

andreas er navnet på maskinen min..

Lenke til kommentar

Har da laget en stream server og en klient. Tenkte jeg skulle teste "loopback" ip`en. Det er vel serveren som skal ha den ip`en?

 

Har hittil ikke lyktes med å få klienten til å connecte seg opp mot servern. Får error når jeg skal connecte. Vet ikke om det kanskje har noe med at porten som jeg bruker kan bli brukt av noe annet.

 

Noen som har noen tips ang. dette hadde vært fint.

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å
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...