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

Dieses Thema im Forum "C/C++" wurde erstellt von sniper, 27.11.2006.

  1. sniper

    sniper Jungspund

    Dabei seit:
    23.11.2006
    Beiträge:
    12
    Zustimmungen:
    0
    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!
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. rikola

    rikola Foren Gott

    Dabei seit:
    23.08.2005
    Beiträge:
    2.133
    Zustimmungen:
    0
    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;
    }
    
     
  4. brahma

    brahma Netzpirat

    Dabei seit:
    06.12.2005
    Beiträge:
    709
    Zustimmungen:
    0
    Ort:
    Münsterland
    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.
     
  5. theton

    theton Bitmuncher

    Dabei seit:
    27.05.2004
    Beiträge:
    4.820
    Zustimmungen:
    0
    Ort:
    Berlin, Germany
    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.
     
  6. brahma

    brahma Netzpirat

    Dabei seit:
    06.12.2005
    Beiträge:
    709
    Zustimmungen:
    0
    Ort:
    Münsterland
    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
     
  7. sniper

    sniper Jungspund

    Dabei seit:
    23.11.2006
    Beiträge:
    12
    Zustimmungen:
    0
    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.
    ??
     
  8. theton

    theton Bitmuncher

    Dabei seit:
    27.05.2004
    Beiträge:
    4.820
    Zustimmungen:
    0
    Ort:
    Berlin, Germany
    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.
     
  9. #8 root1992, 27.11.2006
    root1992

    root1992 von IT-Lehrern besessen

    Dabei seit:
    02.01.2006
    Beiträge:
    1.138
    Zustimmungen:
    0
    Ort:
    Märchenwald
    Kleiner Tipp, (habs bloß Überflogen), schau dir mal die Gültigkeit von Variablen an.
     
  10. theton

    theton Bitmuncher

    Dabei seit:
    27.05.2004
    Beiträge:
    4.820
    Zustimmungen:
    0
    Ort:
    Berlin, Germany
  11. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  12. sniper

    sniper Jungspund

    Dabei seit:
    23.11.2006
    Beiträge:
    12
    Zustimmungen:
    0
    Danke. Wenn ich mit der pdf wertig bin dann melde ich mich wieder zum diesen Tema. :)
     
  13. theton

    theton Bitmuncher

    Dabei seit:
    27.05.2004
    Beiträge:
    4.820
    Zustimmungen:
    0
    Ort:
    Berlin, Germany
    Wenn du mit der fertig bist, werden sich deine Fragen geklärt haben. ;)
     
Thema:

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

Die Seite wird geladen...

Mit Variablen die in eine Funktion initialisiert würden in main weiter arbeiten - Ähnliche Themen

  1. Teil einer Variablen auslesen und in neue Variable schreiben

    Teil einer Variablen auslesen und in neue Variable schreiben: Hallo, ist für Euch bestimmt ganz einfach, aber trotz googlen komme ich nicht auf eine Lösung. In Variable x habe ich stehen: xy,ab Nun möchte...
  2. Inhalt einer Variablen aus Batch an Shellscript übergeben

    Inhalt einer Variablen aus Batch an Shellscript übergeben: Hallo, ich komme einfach nicht drauf. Wie kann ich den Wert aus einer Variablen eines Batches an mein Shellscript übergeben? So? #...
  3. awk: Dateiinhalt/Variableninhalt als Teil einer if-Anweisung

    awk: Dateiinhalt/Variableninhalt als Teil einer if-Anweisung: Hallo Ich habe folgendes Problem: Anhand dem Ergebnis einer Datenbankabfrage habe ich mir mit sed usw. einen String gebastelt und in einer Datei...
  4. Ausgabe einer Variablen splitten

    Ausgabe einer Variablen splitten: Hallo, ich möchte die Zeilennummern einer Datei in Variablen speichern, um mit den variablen weiterzuarbeiten. Das folgende Kommando:...
  5. $HOME wird in crontab beim Setzen einer Variablen nicht aufgelöst

    $HOME wird in crontab beim Setzen einer Variablen nicht aufgelöst: Hallo Jungs, wollte nur nicht für mich behalten, dass bei SLES 10 in der crontab $HOME zwar allgemein aufgelöst wird, die Auflösung...