char * als Referenz übergeben



  • Hallo Forumsaktive!

    Ich weiß, daß ich gerade auf dem Holzweg bin, sehe aber momentan den Wald vor lauter Bäumen nicht:

    Ich habe vor, eine Busnachricht zu lesen, die in einer struct abgelegt ist:

    struct cbusmessage
    {
    	char adress;
    	char laenge;
    	char *message;
    	struct cbusmessage *next_message;
    	char retry;
    };
    

    Die Werte sollte folgender Aufruf zurückliefern:

    static char adress, laenge;
    	static char *readout;
    if (cbus_readmessage(&adress, &laenge, &readout))
    	{
    		// Nachricht vorhanden, Pointer besetzt
    

    Die aufgerufene Funktion ist falsch, ich weiß, aber wie müßte sie richtig aussehen, daß mir hinterher readout auf den Nachrichtenblock zeigt 😕

    char cbus_readmessage(char *adress, char *laenge, char *message)
    {
    	if (inmessages)
    	{
    		*adress = inmessage_first->adress;
    		*laenge = inmessage_first->laenge;
    		message = &inmessage_first->message;
    	}
    	return inmessages;
    }
    

    Ich müßte dem Compiler irgendwie klarmachen, daß er den Pointer bestücken soll, aber bei Pointer auf Pointer als Übergabewert meckert er über Inkompatibilität der Pointertypen und wenn ich casten will, meint er, er kann das nicht.
    Kann mir jemand meine Verwirrung losen, bitte?



  • char cbus_readmessage(char *adress, char *laenge, char **message)
    ..
    *message = inmessage_first->message;

    Kleines Beispiel:

    #include <stdio.h>
    
    void func(char **str)
    {
    	*str = "Test";
    }
    
    int main()
    {
    	char *str;
    
    	func(&str);
    
    	printf("%s\n", str);
    
    	return 0;
    }
    


  • pointercrash() schrieb:

    char cbus_readmessage(char *adress, char *laenge, char *message)
    {
    	if (inmessages)
    	{
    		*adress = inmessage_first->adress;
    		*laenge = inmessage_first->laenge;
    		message = &inmessage_first->message;
    	}
    	return inmessages;
    }
    

    probier's so:

    char cbus_readmessage(char *adress, char *laenge, char **message)
    {
    ...
       *message = inmessage_first->message;
    ...
    }
    


  • Danke an die Antwortenden - so geht's 🙂

    Erbärmlich, daß ich selbst nicht draufgekommen bin 🙄 - ist ja auch logisch so.


Log in to reply