array[] Zuweisung des Strings in 2 Schritte
-
Guten Morgen,
Ich würde gern einem array, der sich in einem Struct befindet, einen String (Hallo_Welt) zuweisen.
Diese will ich ein zwei Schritten machen.
Zuerst 1.Teil des Strings (Hallo) zuweisen.
Dann mit den Pointer auf die erste frei Stelle zeigen und dann den 2. Teil des Strings (_Welt) zuweisen.
Ich habe dem Pointer(*buffer)pointer->buffer = (unsigned char *)&schreiben_1.buf;
die Adresse des Strings übergeben. Schon an dieser Stelle ist mir nicht ganz klar warum (unsigned char
angegeben sollte, den beide Elemente meines structs sind doch char.
Wie kann ich dann auf die 1. freie Stelle im array zeigen?Vielen Dank.
#include <stdio.h> #include <string.h> #define SIZE 128 typedef struct { unsigned char *buffer; unsigned char buf[SIZE]; }TYP_DEF; TYP_DEF schreiben_1; void daten_schreiben_1(TYP_DEF *); int main() { daten_schreiben_1(&schreiben_1); printf("\n%p", schreiben_1.buffer); printf("\n%s", schreiben_1.buf); printf("\n%p", schreiben_1.buffer); return 0; } void daten_schreiben_1(TYP_DEF *pointer) { strcpy(pointer->buf, "Hallo"); pointer->buffer = (unsigned char *)&schreiben_1.buf; strcpy(pointer->buf, "_Welt!"); }
-
mach doch so:
strcpy (pointer->buf, "Hallo"); ... str[b]cat[/b] (pointer->buf, "_Welt!");
den schreiben_1.buffer brauchste doch nicht, oder wofür?
ach ja, das 'unsigned' kommt daher, weil deine struct-members auch unsigned sind. mach die unsigneds aus der struct einfach weg und gut.
-
Danke.
Sicher mit strcat kann man Stings verknüpfen, hab gar nicht daran gedacht.
Ich will aber den Umgang mit Pointer, Array usw. lernen.
Also mit der while-Schleife schaffe ich bis zur 1 freien Adresse nach dem Hallo,
jetzt will ich genau in diese Adresse _Welt schreiben.
Das klappt noch nicth ganz:)Übrigends auch wenn ich den unsigned aus der struct entferne, ist der Compiler trotzdem nicht glücklich.
void daten_schreiben_1(TYP_DEF *pointer) { strcpy(pointer->buf, "Hallo"); pointer->buffer = (unsigned char *)&schreiben_1.buf; //strcat(pointer->buf, "_Welt!"); printf("\npointer->buf = %s", schreiben_1.buf); //Gibt logischerweise den string "Hallo" aus pointer->buffer=pointer->buf; //dem Pointer wird die Anfangsadresse des Stings zugewiesen int i=0; while(pointer->buffer[i]) { printf("\npointer->buffer = %c", schreiben_1.buffer[i]); //gibt Inhalt Zeile für Zeile aus (H a l l o) printf("\npointer->buffer = %p", &schreiben_1.buffer[i]); //gibt Adressen aus um eins aufsteigend pointer->buffer[i++]; } printf("\npointer->buffer = %p", &schreiben_1.buffer[i]); //die nächstfreie Adresse nach den o aus Hallo strcpy(pointer->buffer, "_Welt!"); //will den String in diese freie Adresse reinschreiben }