Forum: PC-Programmierung Ansi C: Eingabe Kommandozeile


von Leon (Gast)


Lesenswert?

Hallo, folgendes möchte ich gerne für meine Applikation umsetzen.

>Kommandozeile Eingabe 1: test.exe -p 64
>Kommandozeile Eingabe 2: test.exe -p 128


Die Eingabe 64 möchte ich gerne in eine Variable speichern. Wie könnte 
ich dies realisieren?
1
int _tmain(int argc, _TCHAR* argv[])
2
{
3
  if(argc < 2)
4
  {
5
    printf ("\nSyntax: Test [-p Puffergröße]\n");
6
  }
7
  if(argc == 3)
8
  {
9
    if((argv[1][0] == '-') && (argv[1][1] == 'p'))
10
    {
11
                      // ????
12
                  }
13
          }

von Dirk B. (dirkb2)


Lesenswert?

Du kannst die folgende Funktionen anschauen
strtol (oder auch atoi)
sscanf

_tmain ist aber nicht ANSI C

von Jens G. (jensig)


Lesenswert?

Stehen solche Grundlagen nicht in jedem C-Lehrbuch drin?

von Georg (Gast)


Lesenswert?

Hallo,

gibt es nur 64/128 oder ist das eine beliebige Zahl?

Georg

von Leon (Gast)


Lesenswert?

Die Zahl kann beliebig sein.

von Leon (Gast)


Lesenswert?

Wenn ich die Funktion atoi benutze, dann gibt Visual Studio 2010 
folgende Meldung aus: Test.exe funktioniert nicht mehr...

1
if((argv[1][0] == '-') && (argv[1][1] == 'p'))
2
{
3
    printf("\nv1 = %d\n", atoi((const char*)argv[2][0]));
4
}

von guest (Gast)


Lesenswert?

Versuch es mal mit:

...
1
 printf("\nv1 = %d\n", atoi(argv[2]);
...

von Dirk B. (dirkb2)


Lesenswert?

atoi erwartet einen Zeiger auf einen Nullterminiertes char-Array 
(C-String): ein char*
argv[2][0] ist aber ein char (ein Zeichen, bei dir die '6' von der "64")

Lass den zweiten Index weg. Dann brauchst du auch den cast nicht mehr. 
Damit hast du nur Fehlermeldung vom Compiler unterdrückt und nicht dein 
Problem behoben.

caste nur, wenn du weisst was du tust.
1
printf("\nv1 = %d (%s)\n", atoi(argv[2]), argv[2]);

von Leon (Gast)


Lesenswert?

Ok vielen Dank. Mit einer Zahl funktionert es. Was müsste ich tun, damit 
ich den Eingabewert 64 in einen Integer ablegen kann?

von Bitflüsterer (Gast)


Lesenswert?

Leon schrieb:
> Ok vielen Dank. Mit einer Zahl funktionert es. Was müsste ich tun, damit
> ich den Eingabewert 64 in einen Integer ablegen kann?
1
 printf("\nv1 = %d\n", atoi(argv[2]);

Das sollte ohne Änderung auch mit Zahlen aus mehreren Ziffern 
funktionieren.

P.S. Es wird gut sein, wenn Du in Zukunft strikt zwischen "Zahl" und 
"Ziffer" unterscheidest.

von Dirk B. (dirkb2)


Lesenswert?

Leon schrieb:
> Was müsste ich tun, damit
> ich den Eingabewert 64 in einen Integer ablegen kann?

Den Rückgabewert von atoi einer int-Variablen zuweisen.

In deinem Beispiel wurde der gleich als Paramter für printf genommen.

von rakudah (Gast)


Lesenswert?

Leon schrieb:
> if((argv[1][0] == '-') && (argv[1][1] == 'p'))

Schon mal von strcmp / strncmp gehört?

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.