Mit Variablen die in eine Funktion initialisiert würden in main weiter arbeiten

S

sniper

Jungspund
Wie kann ich eine char Tabelle die ich in eine Funktion erzeugt und gefüllt habe in main ausgeben? Oder besser nicht nur ausgeben sondern mit den Werten weiter arbeiten? ?(

Kleines Beispiel:
Code:
void funktion() {
…
…
    for (int ctr=0; ctr<5; ctr++) {
         char Tabelle[ctr][512];
         strcpy(Tabelle[ctr][512],irgendwas);
    }
…
…
}
int main() {
…
    if (…) {
        Printf(“1. %s”,Tabelle[0][512]);
    }
    else {
        Printf(“2. %s”,Tabelle[1][512]);
    }
….
}
Danke in voraus!
 
Wenn Du ein Array, dass in einer Funktion erzeugt wird, ausserhalb der Funktion weitererwenden willst, musst Du der Funktion einen Zeiger auf das Array uebergeben:
Code:
#include <stdlib.h>
void funktion (char ** feld_zeiger, int laenge)
{
   int i;
  *feld_zeiger = calloc(sizeof(char), laenge);

  for (i = 0; i < laenge; ++i)
  {  /* mach was mit (*feld_zeiger)[i] */ 
  }
}

int main (void) 
{
   char *uebergabe_zeiger;
  int laenge = 5;
  funktion (&uebergabe_zeiger, laenge);
 
  /* mach was mit uebergabe_zeiger[0] - uebergabe_zeiger[laenge-1]  */
  free(uebergabe_zeiger);

  return 0;
}
 
Oder, was umstritten, aber bei kleinen Programmen möglich ist, wäre die variable ausserhalb aller Funktionen zu deklarieren, dann ist diese in allen Funktionen verfügbar.

Code:
#include <stdlib.h>

char Tabelle[][];

void funktion (char ** feld_zeiger, int laenge)
{
   int i;

Aber nochmal: Das kann auch nach Hinten losgehen, sollte der gleicha Variablenname nochmals woanders deklariert werden.
 
Vor allem wird durch globale Variablen der RAM-Verbrauch unnötig erhöht. Schliesslich bleibt während der kompletten Programm-Laufzeit der Speicherplatz für die globalen Variablen reserviert. Ausserdem ist es schwieriger bei solchen Variablen den Überblick zu behalten, was da gerade für ein Wert drin steht.
Eine Redeklaration meldet ja spätestens der Compiler.
 
Ja, deswegen meinte ich ja, für einen 10-15 Zeiler, also ein kleines Programm, kann mans machen, wenns was grösseres wird auf keinen Fall :D
 
Danke für die Antworten aber..
irgendwie peil ich das nicht ganz…
Eigentlich ein bisschen schon aber ich weis nicht wie ich das so umformen kann das es mit in meinen Programm was nutzt.

Die erste Funktion wo das Array erzeugt wird dient nicht nur um das Array zu erzeugen. Die Funktion selber hat eine ganz andere Aufgabe. Und ich muss der Funktion keine Werte übergeben wie groß das Array sein soll. In der Funktion gibt es eine Schleife die jedes Mal einen anderen String übergibt. Diese Strings wollte ich in ein Array packen. Dieselbe Schleife legt auch logischer weise auch die große von den Array fest. Nun hab ich das Problem das ich mit diesen Array nicht anfangen kann in der main Funktion… Ich muss mit jeden einzelnen weiter arbeiten können.
??
 
Möglichkeit 1 (funktion() gibt das Ergebnis via 'return' zurück)
Code:
#include <stdlib.h>
void funktion (char ** feld_zeiger, int laenge)
{
...
  return feld_zeiger;
}

int main (void) 
{
  mein_feldzeiger = funktion (&uebergabe_zeiger, laenge);
...
  return 0;
}

Möglichkeit 2 (globale Variable):
Code:
#include <stdlib.h>

char *uebergabe_zeiger;

void funktion (int laenge)
{
   int i;
  *uebergabe_zeiger = calloc(sizeof(char), laenge);

  for (i = 0; i < laenge; ++i)
  {  /* mach was mit (*uebergabe_zeiger)[i] */ 
  }
}

int main (void) 
{
  int laenge = 5;
  funktion (laenge);
 
  /* mach was mit uebergabe_zeiger[0] - uebergabe_zeiger[laenge-1]  */
  free(uebergabe_zeiger);

  return 0;
}
Diese 2 Möglichkeiten hast du, wobei Möglichkeit 1 sicherlich die bessere ist, da dort keine globalen Variablen notwendig sind.
 
Kleiner Tipp, (habs bloß Überflogen), schau dir mal die Gültigkeit von Variablen an.
 
Danke. Wenn ich mit der pdf wertig bin dann melde ich mich wieder zum diesen Tema. :)
 
Wenn du mit der fertig bist, werden sich deine Fragen geklärt haben. ;)
 

Ähnliche Themen

Unix Webserver mit HTML Seite erstellen

[Gelöst] Suchen und ersetzen mit Hilfe mehrerer Parameter

Variable aus einer Funktion abrufen

Aufgabe in C

C HTTP request

Zurück
Oben