# Inhalt (Parameter) von argv auslesen?



## Skipp3r (5. Juli 2007)

Hallo...

Ich habe ein Problem und zwar will ich in C durch aufruf eines Parameters in meinem Fall zum Beispiel: "Programmname MBA33:"

Mehrere Parameter sollen nicht möglich sein, dass hab ich soweit eigentlich schon gelöst jedoch will ich nun im prinzip einen Filter, der ne Fehlermeldung ausgibt, wenn der Parametername nicht korrekt eingegeben wurde also er soll daher immer in der Form MBA-Zahl-Zahl: ausgegeben werden, wenn das nicht der fall is soll diese Fehlermeldung erscheinen!

Ansonsten gibt er mir die Start - und Zieladresse mit dem Parameter an!

Das Problem ist nur, dass ich den Inhalt nicht auslesen kann um mal beim ersten Schritt mit einer If-Abfrage zu prüfen ob MBA als erste drei zeichen als Parameter eingegeben wurden!

Am besten wäre es, wenn der Inhalt in zu einer Variablen übergeben wird, umso mit ihr zu arbeiten! Leider weiß ich nicht ob das möglich ist, bin nämlich blutiger anfänger... Mach momentan en Praktikum und da hab ich ein C-Skript bekommen hab das soweit durch und nun soll ich halt en Programm schreiben, mitdem man später ne Mailbox durch Parameteraufruf aufrufen kann! Hab sonst bisher nur en bisschen Delphi programmiert und selbst da auch noch nicht so weit...

Wäre nett, wenn mir da jemand helfen könnte... Hier mal das Grundgerüst, dass ich bisher habe:


```
#include <stdio.h>
 
int main(int argc, char *argv[])
{ char *eargv;
 
  if (argc > 2)     /* Abfrage: Mehr als 1 Parameter; Fehlermeldung */
  {printf ("Bitte nur 1ne Mailbox als Parameter angeben\n");
  }
  else
    if ("Inhalt rauslesen")    /* hier will ich abfragen, ob MBA eingegeben wurde... */
{
     eargv=argv[1]+strlen(argv[1]);     /* Die Ausgabe funktioniert..... */
     printf ("Argument von Adresse[1]: %x .. %x = %s \n", argv[1], eargv. argv[1]);    
    }
    else
    {printf ("\nParametername ist nicht Korrekt!\n");
    }
return 0;
```


----------



## deepthroat (5. Juli 2007)

Hi.

Versuch's mal so:

```
#include <string.h> /* für strncmp */
#include <ctype.h> /* für isdigit */

const char mba[] = "MBA";
...

if (argc == 2) { /* es muss genau ein Parameter angegeben werden. */
  char* mbox = argv[1];

  if (strlen(mbox) == 6 && strncmp(mbox, mba, strlen(mba)) == 0 &&
     isdigit(mbox[3]) && isdigit(mbox[4]) && mbox[5] == ':') {
    /* ist im Format "MBAxx:" */
  }
}
```
Gruß


----------



## Skipp3r (5. Juli 2007)

Supi.... hat funktioniert... vielen Dank... aber ich werd wohl die tage noch öfter irgendwelche fragen haben  ;-)

Aber trotzdem danke fürs helfen....


----------



## Skipp3r (10. Juli 2007)

Huhu... ich mal wieder.... folgendes Problem:

Das war ja soweit Okay... aber ich hab bei meiner Fragestellung nicht ganz aufgepasst....

Und zwar sieht es momentan so aus, dass ich per Parametereingabe ne Mailbox angeben kann die so aussieht:    Zum Beispiel:  "MBA33:"

Nun habe ich folgendes Problem... wenn die Mailbox aber "MBA1" oder "MBA234:" heißt funktioniert das ganze ja nicht mehr!

Ich hab schon nach funktionen gesucht und nur die Atoi() und Atol Funktion gefunden jedoch hab ich keine ahnung wie ich die anwenden soll!!

Wär nett, wenn mir jemand sagen kann ob es damit geht, wenn nicht wie sonst!

Danke


----------



## Skipp3r (10. Juli 2007)

achso... das Programm sieht moemant so aus:


```
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <stdlib.h>
 
int main(int argc, char *argv[1])
{char *eargv;
const char mba[] ="mba";
char *mbox = argv[1];
 
if (argc ==2)
  {
  if (strncmp(mbox, mba, strlen(mba)) == 0)
    { eargv=argv[1]+strlen(argv[1]);
    printf ("Argument[1] von Adresse: %x .. %x = %s \n",
    argv[1], eargv, argv[1]);
    }
  else
    {printf("\nFehler, falscher Parametername.");
     printf("\nBeispiele: 'mba33:' oder 'mba5:'\n");
    }
   }
  else
    {printf("\n Du hast zuviele Parameter eingegeben\n");
     printf("Beispiele: 'mba33:' oder 'mba5:'\n");
    }
 
return 0;
 
}
```


----------



## deepthroat (10. Juli 2007)

Hi.

Erstmal muss die main Funktion so deklariert werden:
	
	
	



```
int main(int argc, char *argv[])
```
(ohne die 1 innerhalb der Klammern).

Dann könnte man die Überprüfung ob das Format stimmt mit sscanf machen:

```
unsigned int u;
char c;

if (strncmp(mbox, mba, strlen(mba)) == 0 &&
    sscanf(mbox + strlen(mba), "%u:%c", &u, &c) == 1) {
}
```
Übrigens, wenn es egal ist, ob MBA groß oder klein geschrieben ist, dann nimm statt strncmp die Funktion strncasecmp.

Gruß


----------



## Skipp3r (18. Juli 2007)

Also... folgendes... ich weiß zwar nicht ob sich hier da jemand auskennt, ich befürchte es ja schon... aber...

Das obige Programm steht funktioniert auch!

Jetzt will ich anhand der mit dem Parameter eingegebenen Mailbox diese erstellen...
Ich habe hier auf dem Rechner OpenVMS....

und das ganze solle mit einer Funktion $crembx gemacht werden!
Ich habe hier auch 2 Bücher über die Mailbox sache für OpenVMS jedoch wird das alles da mit Fortran gezeigt!  

Das einzigste was ich finde mit C ist das hier:


```
int sys$crembx (char prmflg, unsigned short int *chan, unsigned int maxmsg, unsigned int bufquo, unsigned int promsk, unsigned int acmode, void *logname, ...);
```
 
Und die ganzen Argumente sind erklärt... aber ich hab trotzdem keine ahnung wie ich das anstellen soll!

Wär echt super, wenn jemand da wäre der sich damit auskennt.....


----------

