Forum: PC-Programmierung Microsoft Visual Studio: Win32 Konsolenapplikation


von Entwickler (Gast)


Lesenswert?

Hallo,

für eine Anwendung benötige ich einige Eingabeparamter. Wenn ich diese 
Anwendung mit test -l starte erhalte ich nicht in argv[2] das Zeichen 
"l" sondern (null). Wo könnte da das Problem liegen ?
1
#include "stdafx.h"
2
3
int _tmain(int argc, _TCHAR* argv[])
4
{
5
  printf("argv[0] = %s\n",argv[0]);
6
  printf("argv[1] = %s\n",argv[1]);
7
  printf("argv[2] = %s\n",argv[2]);
8
  return 0;
9
}

von Peter II (Gast)


Lesenswert?

Entwickler schrieb:
> ür eine Anwendung benötige ich einige Eingabeparamter. Wenn ich diese
> Anwendung mit test -l starte erhalte ich nicht in argv[2] das Zeichen
> "l" sondern (null). Wo könnte da das Problem liegen ?

weil es so gewollt ist.

arg[0] ist die anwendung
arg[1] ist der erste parameter
arg[2] ist der 2. parameter

und "-l" ist doch nur ein parameter und zwar der erste.

von Le X. (lex_91)


Lesenswert?

Ohne jemals VS oder Win32 programmiert zu haben:

argv ist ein Array, bestehend aus Zeiger auf char.

Da du nur zwei Kommandozeilenparameter hast (test und -l) ist dein 
dritter Zeiger eben NULL.
Eigentlich solltest du argc checken. Da würde nämlich drinstehen, dass 
dein Array die Größe 2 und nicht 3 hat.

Was du machst ist, auf undefinierten Speicher zuzugreifen.

von Entwickler (Gast)


Lesenswert?

Was müsste ich genau tun, damit nach der Eingabe von -l zum Beispiel ein 
printf ausgeführt wird ?

von Peter II (Gast)


Lesenswert?

Entwickler schrieb:
> Was müsste ich genau tun, damit nach der Eingabe von -l zum Beispiel ein
> printf ausgeführt wird ?

ein if einabauen

1
#include "stdafx.h"
2
3
int _tmain(int argc, _TCHAR* argv[])
4
{
5
  if ( argc > 1 && strcmp( rgv[0], "-l" ) == 0 ) {
6
     printf("Hallo World\n");
7
  }
8
9
  return 0;
10
}

so in der art (nicht getestet)

von Entwickler (Gast)


Lesenswert?

Das funktioniert auch nicht.

von Entwickler (Gast)


Lesenswert?

1
#include "stdafx.h"
2
#include <string.h>
3
4
5
int _tmain(int argc, char* argv[])
6
{
7
  //printf("argc    = %d\n",argc);
8
  //printf("argv[0] = %s\n",argv[0]);
9
  //printf("argv[1] = %s\n",argv[1]);
10
  //printf("argv[2] = %s\n",argv[2]);
11
12
  if ( argc > 1 && strcmp( argv[1], "-l" ) == 0 ) 
13
  {
14
    printf("Hallo World\n");
15
  }
16
17
18
19
  return 0;
20
}

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Zunächst mal verstehen, wie argv[] funktioniert:
1
int _tmain(int argc, _TCHAR* argv[])
2
{
3
  int i;
4
5
  for (i = 0; i < argc; i++)
6
    printf("argv[%d] = %s\n", i, argv[i]);
7
8
  return 0;
9
}

Und dann:
1
int _tmain(int argc, _TCHAR* argv[])
2
{
3
  int i;
4
5
  if (argc < 2)
6
    return 0;
7
8
9
  if (!strcmp(argv[1], "-l"))
10
    printf("Na sowas aber auch\n");
11
  return 0;
12
}

von martin (Gast)


Lesenswert?

dann mach aus rgv[0] mal argv[0] . Mitdenken so schwer?

von Udo S. (urschmitt)


Lesenswert?

Entwickler schrieb:
> Das funktioniert auch nicht.

Du gibst dir den Nick "Entwickler" und nicht "Abschreiber"

Also finden den (kleinen) Fehler selbst, ist ne gute Übung.

von Entwickler (Gast)


Lesenswert?

Das habe ich bereits schon entdeckt und abgeändert.

von Udo S. (urschmitt)


Lesenswert?

Nachtrag: Zu spät :-)

von Entwickler (Gast)


Lesenswert?

argv[1] enthält den String "-l" nicht. Das verstehe ich nicht.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Und was gibt
1
int _tmain(int argc, _TCHAR* argv[])
2
{
3
  int i;
4
5
  for (i = 0; i < argc; i++)
6
    printf("argv[%d] = %s\n", i, argv[i]);
7
8
  return 0;
9
}

aus?

von Entwickler (Gast)


Lesenswert?

Folgendes wird ausgeben, nach der Eingabe von "test -l" :

argv[0] = t
argv[1] = -

von Peter II (Gast)


Lesenswert?

Entwickler schrieb:
> Folgendes wird ausgeben, nach der Eingabe von "test -l" :
>
> argv[0] = t
> argv[1] = -

sieht mir sehr stark nach einem unicode problem aus. scheinbar ist ein 
argv unicode gespeichert, aber printf will es es als ASCII ausgeben.

ändere mal bitte die main ab

int main(int argc, CHAR* argv[])

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Peter II schrieb:
> sieht mir sehr stark nach einem unicode problem aus.

Das kann es in der Tat sein.
Unter "Configuration Properties"-"General" als "Character Set"
"Use Multi-Byte Character Set" einstellen, und nicht "Unicode".

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.