Re: [maillist] C++ Problem

Stefano Ianigro (Stefano.Ianigro@UniBw-Hamburg.DE)
Fri, 20 Aug 1999 11:32:30 +0200 (MET DST)

Tach,
Am 20-Aug-99 schrieb Udo Walter:

-> ich gebs zu, unter C hab ich mit 'diesen' Zeichen nichts gemacht - ich
-> habs eben mal probiert, es geht so ned.
-> das folgende Programm
-> <---------
-> u_char string[8];
-> u_char x = 0;
->
-> for (x=0;x<8;x++) {
-> string[x] = 0xcc;
-> }
-> strcpy(string,"n");
-> for (x=0;x<8;x++) {
-> printf ("0x%02x ",string[x]);
-> }
-> ------>
-> mit dem ergebnis:
-> tmp> a.out
-> 0x6e 0x00 0xcc 0xcc 0xcc 0xcc 0xcc 0xcc
->
-> zeigt, daß tatsächlich zwei Byte reingelegt werden.

Klar. strcpy macht in diesem Falle folgendes:

1. in string[0] wird das Zeichen n abgelegt
2. in string[1] wird das Zeichen \0 abgelegt. Damit ist der char-Array null
terminiert.

-> x[2] sind tatsächlich zwei Byte: x[0] und x[1];
-> x[2] ist out of range.

Logisch, weil in string[1] schon das Ende durch \0 steht.

-> Ein strcpy(string,'n'); gibt beim Compilieren Warning und beim Ausführen
-> coredump.
-> was ist da verkehrt?

Die Funktion strcpy erwartet einen String, der normalerweise von zwei "
eingeschlossen ist. Hier soll jedoch nur ein ZEICHEN kopiert werden und das
geht nicht. Willst Du ein Zeichen in eine Position des char-Array string
einfuegen, dann muss das so heissen:

string[4] = 'n';

Hilft das?

Beste Gruesse

Stef

-- 
/----------------------------------------------------------------------\
| Dr. Stefano Ianigro                                                  |
| Institut fuer Informatik - Fachbereich WOW                           |
| Universitaet der Bundeswehr Hamburg      "Ich weiss, dass ich nichts |
| Holstenhofweg 85                          weiss..." (Sokrates)       |
| D-22043 Hamburg               Tel.: 040/6541-2656 oder -3345 (Sekr.) |
| E-Mail: stef@unibw-hamburg.de Fax:  040/6541-2780                    |
| HTTP: http://www-ifi.unibw-hamburg.de                                |
\----------------------------------------------------------------------/

This message was sent by XFMail on 20-Aug-99 at 11:25:50.