Forum: PC-Programmierung Win32 Konsolenanwendung


von user (Gast)


Lesenswert?

Hallo,

in meiner Win32 Konsolenanwendung möchte ich einen Text als 
Eingabeparameter übergeben und in einen Puffer ablegen. Wie könnte man 
die realisieren?
1
char Frame[64];
2
3
int _tmain(int argc, _TCHAR* argv[])
4
{
5
 if(argc < 2)
6
 {
7
   printf ("\nSyntax: Win32 Testprogramm [-d Wert]\n");
8
   printf ("\nOptionen:\n\t-d\tDaten die versendet werden sollen\n\n");
9
 }
10
 if(argc == 2)
11
 {
12
  if((argv[1][0] == '-') && (argv[1][1] == 'd'))
13
  {
14
            // Schreibe Text nach dem Parameter "-d" in den Puffer Frame 
15
         }
16
 }
17
}

von Philip K. (philip_k)


Lesenswert?

1
for(int i = 0; i < 64 && argv[2][i] != '\0'; i++)
2
{
3
  Frame[i] = argv[2][i];
4
}

argc musst Du dann aber <3 abfragen

von Karl H. (kbuchegg)


Lesenswert?

Philip K. schrieb:
>
1
> for(int i = 0; i < 64 && argv[2][i] != '\0'; i++)
2
> {
3
>   Frame[i] = argv[2][i];
4
> }
5
>
>


recht aufwändig.
Da String Aktionen in einem Programm schon mal häufiger vorkommen, gibt 
es dafür vordefinierte Funktionen
1
  strcpy( Frame, argv[2] );

wenn Gefahr besteht, dass der Benutzer auf der Tastatur eingeschlafen 
ist, dann
1
  strncpy( Frame, argv[2], sizeof(Frame) );
2
  Frame[sizeof(Frame)-1] = '\0';

von user (Gast)


Lesenswert?

Vielen Dank für die Hilfe. Nun funktioniert es so wie ich es möchte. 
Danke!

von Rolf Magnus (Gast)


Lesenswert?

Karl Heinz schrieb:
> Da String Aktionen in einem Programm schon mal häufiger vorkommen, gibt
> es dafür vordefinierte Funktionen
>   strcpy( Frame, argv[2] );

Ähm, wie bitte?

> wenn Gefahr besteht, dass der Benutzer auf der Tastatur eingeschlafen
> ist, dann

Nicht nur dann, sondern grunsätzlich immer hat man sicherzustellen, 
daß es keinen Buffer Overflow geben kann!

von Karl H. (kbuchegg)


Lesenswert?

Rolf Magnus schrieb:

>>   strcpy( Frame, argv[2] );
>
> Ähm, wie bitte?

Worauf willst du hinaus?

>> wenn Gefahr besteht, dass der Benutzer auf der Tastatur eingeschlafen
>> ist, dann
>
> Nicht nur dann, sondern grunsätzlich immer hat man sicherzustellen,
> daß es keinen Buffer Overflow geben kann!

Zustimmung.
Das hätte ich noch dazuschreiben wollen, aber dann verschwitzt:
Sobald ein menschlicher Benutzer in irgendeiner Form im Spiel ist, muss 
man grundsätzlich davon ausgehen, dass es zu einem Overflow kommen kann 
und entsprechend agieren.
Wenn in einem Programm intern hingegen ein bereits sicher nicht zu 
großer String kopiert werden muss, dann kann man auch mit den normalen 
strxxx Funktionen arbeiten.

von Rolf Magnus (Gast)


Lesenswert?

Karl Heinz schrieb:
> Worauf willst du hinaus?

Ich war nur etwas erstaunt, von dir eine Antwort zu sehen, die bewußt 
einen
potenziellen Buffer-Overflow enthält.

> Sobald ein menschlicher Benutzer in irgendeiner Form im Spiel ist, muss
> man grundsätzlich davon ausgehen, dass es zu einem Overflow kommen kann
> und entsprechend agieren.

Ich würd's noch allgemeiner fassen: Sobald es sich um Daten handelt, die 
von außen kommen...
Daten aus einem File oder vom Netzwerk würde ich nicht trauen, auch wenn 
die nicht von einem menschlichen Benutzer kommen.

Karl Heinz schrieb:
> Wenn in einem Programm intern hingegen ein bereits sicher nicht zu
> großer String kopiert werden muss, dann kann man auch mit den normalen
> strxxx Funktionen arbeiten.

Es ging ja um die Kommandozeilenparameter. Das ist definitiv was, wo man 
die Größe prüfen muß.

von Karl H. (kbuchegg)


Lesenswert?

Rolf Magnus schrieb:
> Karl Heinz schrieb:
>> Worauf willst du hinaus?
>
> Ich war nur etwas erstaunt, von dir eine Antwort zu sehen, die bewußt
> einen
> potenziellen Buffer-Overflow enthält.

Ich bin mittlerweile schon froh, wenn die angehenden C-Programmierer 
überhaupt je etwas von Funktionen wie strcpy oder strcat gehört haben 
:-)

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.