static struct leeren



  • aber wieso löschen? wieso nicht einfach bei bedarf überschreiben...



  • Mit memset geht es auf jeden Fall, aber da ich meinem Compiler nicht so vertrauen kann geht es eventuell mit

    static struct stList staticList[2] = {{0}};
    


  • HighLigerBiMBam schrieb:

    staticList[1] = {0};
    

    So vielleicht?

    Wenn schon so:
    staticList[0] = {0};



  • Ich habe nicht gesehen, dass sein Array nur 1 Element hat :p



  • Danke zunächst an itedvo

    Zitat: aber wieso löschen? wieso nicht einfach bei bedarf überschreiben...

    Das war für mich die richtige Frage 😃 die mich zum nachdenken gebracht hat 😃 hatte ein ganz anderes Problem und hätte es beinahe auf eine schlechte Art und Weise behoben.

    lowbyte_ das wär auch nicht das richtige würde ich sagen.

    staticList[0] = {0};
    

    Fehler: <ident> expected before '{'

    Wäre aber trotzdem schön wenn wir hier eine Saubere Antwort zusammenbekommen.
    Denn ich hasse es wenn ich in ein Forum geh und die eine Frage zu mein Problem finde, aber keine Antwort nach x km Text steht 😉



  • Der Spaß mit dem Initialisieren durch die geschweiften Klammern funktioniert auch wirklich nur beim initialisieren und das kann man eben nur 1 mal.

    Wenn man mal davon ausgeht, dass die Struktur als Block im Speicher liegen sollte, würde es ein strncpy mit der entsprechenden Länge der Struktur tun...



  • LHBL2003 schrieb:

    Nun möchte ich ungerne jede Variable initialisieren sondern gleich die ganze Struktur. Aber wie?

    static struct stList dummy;	
    static struct stList staticList[1];
    
    staticList[0].valueOne = 13;
    staticList[0].valueTwo = 11;
    
    Jetzt löschen.... ===>
    staticList[0] = dummy;
    
    staticList[0].valueOne = 12;
    


  • LHBL2003 schrieb:

    Hi,

    ich habe eine Struktur die ich fülle,
    während der Laufzeit möchte ich diese leeren um neue Daten einzutragen.
    Nun möchte ich ungerne jede Variable initialisieren sondern gleich die ganze Struktur. Aber wie?

    static struct stList staticList[1];
    
    staticList[0].valueOne = 13;
    staticList[0].valueTwo = 11;
    
    Jetzt löschen....
    
    staticList[0].valueOne = 12;
    

    Vielen Dank

    Man sollte sich von der Idee verabschieden, Daten zu "löschen", so wie wenn man auf Papier einen Radiergummi verwenden würde. Bits kennen nur 2 Zuständen, gesetzt oder nicht gesetzt (auf logischer Ebene und man kann nur diese 2 über den Befehlsatz setzen). Ein Zustand gelöscht kann es deshalb nicht gesetzt werden, also kann man auch kein Array oder dessen Inhalt löschen.

    Wie itedvo schon sagte, du brauchst einfach nur die Werte neu zu schreiben und das war's. Semantisch kann man vielleicht das Löschen mit dem "Setzen auf 0" simulieren, aber einem muss dennoch jederzeit klar sein, dass man Daten nicht löschen kann, auch wenn man sie auf 0 setzt!



  • supertux schrieb:

    Semantisch kann man vielleicht das Löschen mit dem "Setzen auf 0" simulieren, aber einem muss dennoch jederzeit klar sein, dass man Daten nicht löschen kann, auch wenn man sie auf 0 setzt!

    Interessante Theorie. Ich kenne nur sehr wenige Applikationen, die nicht auch eine Möglichkeit Daten zu löschen anbieten, alles Betrug?
    Es geht hier wohl darum, Informationen zu löschen, indem man Daten ändert, aber bis auf Dich haben das hier glaube ich auch alle verstanden.



  • ich kann mir jetzt nur eine möglichkeit vorstellen, wieso du die daten "löschen" willst... wahrscheinlich aus folgendem grund: es soll von aussen,
    sprich über Speicherauslesung, nicht erkennbar sein, was drinnen stand. so wie es bei
    manchen spielen gehandhabt wird, damit man eben nicht "cheaten" kann ^^

    ansonsten weiss ich jetzt echt nicht wieso du die daten mit etwas überschreiben
    möchtest. weil du greifst logischer weise sowieso nur auf diese daten zu, die
    du auch brauchst. Denn zum beispiel sowas:

    du hast ein Verwaltungsprogramm, welches auflistet welche Dateien für das Programm
    zur verfügung stehen... die datei-informationen hast du in nem struct mit vektoren
    gespeichert. Jetzt wird eine Datei gelöscht und sollte natürlicherweise auch nicht
    mehr zur Auswahl stehen. Dabei überschreibst du einfach die nicht mehr zu brauchenden
    daten mit den daten des nächsten index (usw. bis letztes element) und setzt die
    anzahl der vorhandenen Daten um 1 zurück. ist der letzte verwendete index betroffen,
    so wird lediglich die anzahl reduziert...

    daraus folgt:

    char FILENAMES[15] enthält "beispiel.txt"
    soll beispiel.txt entfernt werden, so wird die anzahl der dateien um 1 veringert... in FILENAMES[15] steht zwar noch "beispiel.txt" drinnen, jedoch
    greifst du nicht mehr darauf zu...

    wär jetzt nur mal so als beispiel...



  • Belli schrieb:

    supertux schrieb:

    Semantisch kann man vielleicht das Löschen mit dem "Setzen auf 0" simulieren, aber einem muss dennoch jederzeit klar sein, dass man Daten nicht löschen kann, auch wenn man sie auf 0 setzt!

    Interessante Theorie. Ich kenne nur sehr wenige Applikationen, die nicht auch eine Möglichkeit Daten zu löschen anbieten, alles Betrug?
    Es geht hier wohl darum, Informationen zu löschen, indem man Daten ändert, aber bis auf Dich haben das hier glaube ich auch alle verstanden.

    und wie würdest du ein Byte oder gar ein Bit löschen?



  • Ich bin da jetzt nicht so der Experte, was Programmieren angeht, aber ich hab mal "bit löschen" bei Google eingegeben, da kommen gut 5000 Ergebnisse bei raus. Nun weiß ich natürlich auch, dass etwas Falsches nicht dadurch richtig wird, dass es genug Leute für richtig halten, aber ich habe kaum ein C/C++ - Buch, in dem nicht auch von Operatoren zum setzen/testen/löschen von bits die Rede ist. Das bringt mich jetzt zumindest ins Grübeln ...
    Auch was die ganzen Datenschutzbeauftragten ins unserem schönen Land wollen, erscheint mir vor dem Hintergrund, dass Daten gar nicht gelöscht werden können, rätselhaft.



  • Laß Dich da nicht verwirren.

    Allgemein gilt, wenn alles auf 0 ist ist es halt gelöscht (mehr eine Konvention).
    Statt "Löschen" könnte man auch "definierter Ausgangszustand" sagen (das trifft
    es eh besser).

    Eigentlich legst Du ja selbst fest, was die einzelnen Bits und Bytes bedeuten.
    Du kannst auch alle Byte auf $ff setzen und sagen: Das ist für mich "gelöscht".

    Grüße Joe.



  • Scheppertreiber schrieb:

    Laß Dich da nicht verwirren.

    Allgemein gilt, wenn alles auf 0 ist ist es halt gelöscht (mehr eine Konvention).
    Statt "Löschen" könnte man auch "definierter Ausgangszustand" sagen (das trifft
    es eh besser).

    Eigentlich legst Du ja selbst fest, was die einzelnen Bits und Bytes bedeuten.
    Du kannst auch alle Byte auf $ff setzen und sagen: Das ist für mich "gelöscht".

    Grüße Joe.

    so würd ichs auch sagen... Entweder einfach nich mehr auf den speicherbereich zugreifen bis er wieder von nöten ist (sprich mit neuen daten
    überschrieben) oder alles auf 0 bzw. das was du als Gelöscht bezeichnen möchtest
    setzen.


Anmelden zum Antworten