Name der Variable im String, wie auf Variable zu

…greifen.

Wie kann man in C auf eine variable Zugreifen, deren Name in einem String steht.

Also Bsp:
int name;
char temp[] = „name“

Wie kann ich mittels dem string in temp der Variablen name einen Wert zuweisen?

Zur Erklärung:

nicht einfach
name = 20;

sondern

wunderfunktion(temp, 20);

wobei „name“ in temp steht und dannach ist

(name == 20) true.

sondern
wunderfunktion(temp, 20);
wobei „name“ in temp steht und dannach ist
(name == 20) true.

Ich denke dass das gar nicht geht. Variablen-Namen werden beim Kompilieren üblicherweise komplett entfernt und sind später nur noch Speicheradressen. Es gibt dann keine Information mehr, über die du „name“ irgendwie einer Speicheradresse zuweisen kannst.

Aber wieso zum Henker willst du das überhaupt? Wozu soll das gut sein?

Hallo Steffen,

mal davon abgesehen, dass das Ganze nicht besonders performant und schön ist, hier mal ein Beispiel in C++ (ohne Fehlerbehandlung!). In C muesstest du die ADT selbst programmieren:

#include 
#include 
#include 

template
 struct Accessor
 : public std::map
 {
 Accessor()
 : std::map()
 {
 }

 virtual ~Accessor()
 {
 }

 void registerAccess(
 const std::string& sName,
 T\* pVar)
 {
 (\*this)[sName] = pVar;
 }

 T\* find(
 const std::string& sName)
 {
 return (\*this)[sName];
 }
 };


namespace
{
 void process(
 int& rItem)
 {
 rItem++;
 }

 void printValue(
 int nValue)
 {
 printf("Value: %d\n",nValue);
 }
}

int main()
{
 Accessor oAccessor;
 int name = 42;

 oAccessor.registerAccess("name",&name);
 printValue(name);

 process(\*oAccessor.find("name"));
 printValue(name);

 return 0;
}

Gruss
norsemanna

Hallo,

Wie kann man in C auf eine variable Zugreifen, deren Name in
einem String steht.

Gar nicht.
Wenn du diese Problem ist das ein Zeichen dafuer, dass du bestimmte Informationen eigentlich in eine Hashtabelle schreiben solltest, nicht in Variablen direkt.

Gruesse,
Moritz

Da hast Du natürlich recht. Eigentlich sollte das ein Zwischenschritt zum struct-Parsen (siehe meine vorige Frage) sein.
Ich werde mir wohl ein Hilfskonstrukt einfallen lassen und muß das struct dafür entsprechend erweitern.

Interessanter Ansatz. Vielen Dank! Muß ich mir noch mal in Ruhe anschauen.
Um es in C umzusetzen, werde ich um eine Hilfskonstruktion die Adresse und Typ der avriable speichert, nicht herumkommen.

Da hast Du natürlich recht. Eigentlich sollte das ein
Zwischenschritt zum struct-Parsen (siehe meine vorige Frage)
sein.
Ich werde mir wohl ein Hilfskonstrukt einfallen lassen und muß
das struct dafür entsprechend erweitern.

Im Prinzip ist sowas tatsächlich möglich, und wird beim dynamischen Linken (z. B. von plugins) auch benutzt. Hierzu müssen allerdings bestimmte Voraussetzungen beim Compilieren gegeben sein.

Zum reinen Parsen von Daten sollte man sowas eigentlich auf keinen Fall verwenden. Wenn deine zu parsenden Datenstrukturen sehr umfangreich sind, macht es vielleicht mehr Sinn, eine reine Datenbeschreibung in eine Datei zu packen und mit einem kleinen Hilfsprogramm daraus automatisch C-Quellcode zu erzeugen, den du dann schließlich in dein Hauptprogramm einbindest.

Ansonsten kommst du wohl nicht um eine lange if-Orgie herum:

if (!strcmp(feld, „NAME“))
{ struct.name = feld; }
else if (!strcmp(feld, „VORNAME“))
{ struct.vorname = feld; }
else if (…)

Ciao

Elizar