Microsoft Visual Studio: Win32 Konsolenapplikation

Gast #3022870
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
}
Gast #3022882
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.
#3022888
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.
Gast #3022914
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)
Gast #3022919
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
}
Persönliche Seite #3022920
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
}
Gast #3023017
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[])

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren