Zeigerarray



  • Hallo,

    ich hab ein kleines Problem, und zwar habe ich ein Zeigerarray angelegt, nun möchte ich abhängig von der Eingabe eine bestimmte Anzahl weiterspringen und den Inhalt des Arraya ausgeben.

    Aber irgendwie funktioniert das weiterspringen nicht?!

    if(!strcmp(Farbe1, "Rot"))
    		{
    			farben+=3;
    		}
    		else if(!strcmp(Farbe1, "Violett"))
    		{
    			farben+=6;
    		}
    		if(!strcmp(Farbe2, "Rot"))
    		{
    			farben++;
    		}
    		else if(!strcmp(Farbe2, "Violett"))
    		{
    			farben+=2;
    		}
    

    evtl kann mir ja jemand weiterhelfen



  • Hmm, wie ist denn deine Variable farben definiert?

    Ich nehme mal an sowas wie
    char farben[]="Irgend ein String mit Farben drin";

    Kannst dann entweder mit farben[NummerDesZeichens] auf die einzelnen Zeichen zugreifen oder ein
    char *farbenp = farben;
    definieren und mit farbenp springen wie du es mit farben vorhattest.



  • Hmm, schwer zu sagen. In deinem Code-Ausschnitt kann ich keinen Fehler erkennen, aber da ist von dem Array ja auch nichts zu sehen. Da musst du wohl mehr posten (aber bitte nicht zu viel).



  • Also, meine Deklarartion

    static char *farben [] = {"Grün", "Gelb", "Blau", "Gelb", "Rot", "Purpur", "Blau", "Purpur", "Violett"};
    

    und jetzt less ich in Farbe1 und Farbe2 zwei Farben ein und dann will ich die Mischfarbe bestimmen und dazu will ich eben meinen Zeiger weiter schieben und dann ausgeben



  • nwp2 schrieb:

    Hmm ...

    µngbd schrieb:

    Hmm ...

    Hehe. Die Antwort ist einhellig: Hmm.

    Alex += Alex schrieb:

    und jetzt less ich in Farbe1 und Farbe2 zwei Farben ein und dann will ich die Mischfarbe bestimmen und dazu will ich eben meinen Zeiger weiter schieben und dann ausgeben

    Ich verstehe, was du vorhast. Wie äussert sich denn das Aber irgendwie funktioniert das weiterspringen nicht? Ein Compiler-Fehler? Oder ein unerwartetes Verhalten?

    Das sieht nach einem Problem aus, das man gut eingrenzen kann. Mach mal ein kleines lauffähiges Programm draus, dann bekommen wir das sicher schnell hin.



  • irgend ein compiler fehler

    error C2106: '+=': Linker Operand muss ein L-Wert sein



  • Ahh! Dass ich das nicht gleich gesehen habe!

    farben ist ein Array, und Arrays kannst du nicht verändern. Also statt farben zu erhöhen besser eine Index-Zahl verwenden, und die erhöhen. So wird's gehen.



  • ja, das ist klar, aber wenn ich farben++ mache, dann setze ich auch nur den Zeiger der auf farben zeigt, ein element weiter, wenn ich *farben++ mache verändere ich den inhalt an der stelle

    daran kanns also nich liegen



  • Dein Compiler meckert weil farben kein L-Wert ist. Das bedeutet, farben kann niemals links vom Gleichheitszeichen stehen, du kannst farben keinen Wert zuweisen (außer in der Definition).
    Wie ich schon geschrieben habe kann das nicht gehen weil farben ein Array und kein Pointer ist. Du kannst dir aber mal eben einen Pointer basteln.

    char *farben[] = {"Grün", "Gelb", "Blau", "Gelb", "Rot", "Purpur", "Blau", "Purpur", "Violett"};
    
    int main(){
    	char **f = farben;
    	printf("%s ", *f);
    	f++;
    	printf("%s ", *f);
    	f+=5;
    	printf("%s\n", *f);
    }
    

    Ergibt "Grün Gelb Blau". Ich hoffe mal das ist das was du wolltest.


Anmelden zum Antworten