Variablenname aus String auswerten



  • Hallo,

    ich habe ein Problem und hoffe, dass ich es so beschreiben kann, dass es jemand versteht:
    Ich möchte gerne einer Variablen den Wert einer zweiten Variable zuweisen. Den Namen der zweiten Variable habe ich jedoch nur als String vorliegen. Gibt es eine Möglichkeit, eine solche Zuweisung zu machen?
    Ich weiß dass es z.B. in anderen Programmiersprachen Methoden dafür gibt, so z.B. die eval-Funktion in Matlab. Aber soweit ich weiß, gibt es keine entsprechende Funktion in C.

    Ich bin für jede Hilfe dankbar.

    Viele Grüße,
    Kristina



  • Ne, das geht nicht. Aber wenn du das Problem ein wenig größer umreißt, gibt es evtl eine andere elegante Lösung dafür 🙂



  • Tja, ich weiß leider nicht, was es für eine andere Lösung geben könnte ... ich möchte dieser ersten Variable dynamisch beliebige Variablen zuweisen, von denen ich nichts weiß als den Namen ...



  • Dann bleibt dir wohl nichts anderes übrig, als ein Array zu deklarieren, in dem du die Variable und den Namen speicherst (vorausgesetzt, die Variablen haben alle den gleichen Datentyp z.B. alle float):

    float a, b, c, d;
    
    struct VarName
    {
      float *pVar;
      const char *cName;
    } varnames[] =
    {
      { &a, "a" },
      { &b, "b" },
      { &c, "c" },
      { &d, "d" }
    };
    

    An meinem Beispiel kann man auch erkennen, daß es dann sinnvoller wäre, die Variablen selbst als ein Array anzulegen, d.h float f[Max] und dann mittels Index darauf zuzugreifen.

    Nun mußt du dann nur noch eine Stringvergleichsfunktion schreiben.



  • Das geht leider so auch nicht 😞
    Das ganze ist leider so komplex, dass es schwer ist, es kurz zu beschreiben ...
    Ich kann kein Array anlegen, weil ich erst zur Laufzeit weiß, welche Variablen es gibt. Ich weiß gerade nicht wirklich, wie ich es erklären kann, aber Deine Lösung funktioniert leider so nicht.

    Aber trotzdem danke für Eure Antworten.



  • Kristina schrieb:

    Ich kann kein Array anlegen, weil ich erst zur Laufzeit weiß, welche Variablen es gibt.

    Das kann ja schon mal nicht sein, weil die Variablennamen schon zur Compilezeit feststehen müssen.



  • Ich sag ja, das ist alles sehr komplex ... das Problem ist, dass ich die Funktion, in der mein Problem auftritt, in mehreren Projekten verwende. Die Variablen werden in anderen Funktionen erzeugt, die ich aufrufe. Dies sind aber abhängig vom Projekt unterschiedliche Funktionen und daher auch unterschiedliche Variablen.

    Ich denke, dass mein Problem auf diesem Weg einfach nicht zu lösen ist.

    Vielen Dank für Eure Bemühungen.



  • Hm, wäre es nicht möglich dafür einfach einen Pointer zu verwenden?
    Wenn du statt des Namens der 2. Variable einen Pointer nehmen könntest, kannst du deine erste Variable auf beliebige andere Variablen verweisen lassen ohne dich um den Namen zu kümmern.
    Allerdings müsstest du dafür natürlich statt des Namens die Adresse der 2. Variable verwenden und ich weiß nicht ob du auf die entsprechenden Codeteile Zugriff hast.

    mfg exnase



  • Das wäre meine Ausweichlösung, die allerdings nicht so einfach ist, weil es relativ schwierig ist, an die Adresse ranzukommen.
    Ich habe aber mittlerweile einen anderen Lösungsweg, der recht vielversprechend aussieht und den ich zunächst mal verfolgen möchte.

    Vielen Dank,
    Kristina


Anmelden zum Antworten