2 Stimmen

Grundlegende C-Frage zum Kopieren von Zeichenfeldern in Zeiger auf Zeichenfolgen

Ich habe einige Zweifel beim grundlegenden C-Programmieren.

Ich habe einen Zeichenarray und muss es in einen Zeiger auf ein Zeichen kopieren. Also habe ich folgendes gemacht:

char a[] = {0x3f, 0x4d};
char *p = a;     
printf("a = %s\n",a);
printf("p = %s\n",p);
unsigned char str[] = {0x3b, 0x4b};
unsigned char *pstr =str;
memcpy(pstr, str, sizeof str);
printf("str = %s\n",str);
printf("pstr = %s\n",pstr);

Meine printf-Anweisungen für pstr und str werden mit den Daten "a" angehängt. Wenn ich memcpy entferne, erhalte ich Müll. Kann mich ein C-Guru erleuchten?

0 Stimmen

Du kopierst kein Array in einen Zeiger. Du erhältst einen Zeiger auf das erste Element eines vorhandenen Arrays. Keine Kopie.

0 Stimmen

Ich sehe nicht, wo etwas "angehängt" wird.

-1voto

Vereinbart. Sie müssen ein Null-Byte am Ende Ihres Arrays von Zeichen hinzufügen.

char a[] = {0x3f, 0x4d, '\0'};

Der Grund dafür ist, dass Sie eine Zeichenkette erstellen, ohne anzugeben, wo sie tatsächlich endet. Ihre memcpy() Funktion kopiert *str nach *pstr und fügt automatisch ein Null-Byte hinzu, weshalb es funktioniert.

Ohne memcpy() weiß die Zeichenkette nie, wann sie enden soll, daher greift sie auf aufeinander folgende Speicheradressen zu und gibt die dort gespeicherten zufälligen Werte zurück. Wenn Sie eine Zeichenkette aus Zeichen erstellen, denken Sie immer daran, sie mit einem Null-Byte zu beenden.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X