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
    }
    

Anmelden zum Antworten