Globale Variable



  • Hallo!
    Ich bin ein Neuling in Sachen C und hoffe auf Verständnis 🙂

    Problemstellung:
    Ein Array data[100] sollte über zwei case Konstrukte je nach Bedarf mit Daten gefüllt / neu gefüllt und abgefragt werden.

    Wie kann ich data als globale Variable definieren, damit diese überall zur Verfügung steht?

    Grüsse,
    Gabi



  • ich programmiere mit c#, da gibts sowas nicht ;). Aber ich glaube, wenn dus vor den beiden case-blöcken definierst, ist reicht das auch. Das ist dann nicht global, wenns in der funktion/main funktion definiert wird, aber du kannst trotzdem drauf zugreifen



  • mhhhh war eine globale variable doch

    globale Variablen haben den Gültigkeitsbereich in der ganzen datei also werden sie nicht in einem bestimmten block (zb {block} ) deklariert.

    eine globale variable:

    #include ...
    
    char data[100];
    
    int func()
    {
    ...
    }
    
    int main()
    {...}
    

    eine lokale variable:

    #include ...
    
    int func()
    {
        char data[100];
        ...
    }
    
    int main()
    {...}
    

    data ist in diesem fall nur in der funktion "func" gültig.
    wenn du data als globale varialbe deklarieren will musst die sie ausserhalt jeglicher funktionen oder sonstigen blocks deklarieren:

    include ...
    
    char data[100];
    
    int fülldata()
    {
        ...
    }
    
    int löschdata()
    {  
       ...
    }
    
    int main()
    {
       ...
    }
    

    hui, ausführlich erklärt?



  • Danke Fachmann und kolzo für die schnelle Antwort.
    Ich habe die data Variable ausserhalb deklariert und es funktioniert jetzt auch.

    Nur, die alten Eintrge der data Variable sind jetzt in jedem Case Durchgang drin und werden um die Nachfolgenden Daten ergänzt, was irgendwann zu einem Overflow führt.

    strcat(data, "Test");
    

    Wie kann ich die "alten" Einträge in data löschen?
    Brauch ich dazu Zeiger?

    Grüsse,
    Gabi



  • Ich habe das Problem mal mit folgendem Code gelöst.
    Dies scheint mir aber keine sexy Lösung zu sein, oder?

    case 1: {
         int x;
         for (x=0; x<100; x++)
         {
         data[x]=NULL;
         }
    } break;
    

    Gabi



  • ne der is eig ok
    mit dem sexy-weg löscht du aber alle elemente in data. und wenn du aber nur gezielte elemente löschen willst dann musst du die elemente danach um eins vorrücken mit nem bestimmten algorhytmus



  • du koenntst deinen char array auch mit memset löschen wenn ich mich nicht irre



  • Wenn data eh nur ein String enthält der mit strcat (solltest mal man: strncat anschauen) verlängert wird, reicht auch ein einfaches
    [cpp]data[0] = '\0';

    Ansonsten wäre eine genauere Beschreibung des Problem inkl. Codebeispiel sinnvoll.



  • An dieser Stelle sei mir der dezente Hinweis auf strcpy gestattet, wenn man den String ersetzen statt verlängern will :p



  • Die Idee mit dem setzen des Terminierungs-Zeichen an Anfang habe ich mal so übernommen, danke.

    Gabi


Anmelden zum Antworten