Announcement

Collapse
No announcement yet.

Unterschied {""} und NOT {""}

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Unterschied {""} und NOT {""}

    Hi hab mein Programm geschrieben... und es Läuft auch! NUR hab ich ma ausversehen werden ich das Programm noch bearbeitet habe das = {""} von
    Code:
    char komp_text[1000] = {""};
    Weggelöscht also stand nurnoch
    Code:
    char komp_text[1000];
    Da und es lief nichtmehr... FEHLER >>> Durch einen Pufferüberlauf in Projekt *** wurde der interne Programmzustand beschädigt... !

    Und abkack!

    bis ich das gefunden hatte waren 30 min rum... deshalb wollte ich jetzt mal wissen was den da bitte der Unterschied sein soll ?

    Danke Cracker0dks

  • #2
    C/C++

    Definition <-> Deklaration <-> Initialisierung

    http://www.google.de/search?sourceid...on+deklaration

    Du hast im 2. Fall kein Speicherplatz initialisiert
    Zuletzt editiert von Christian Marquardt; 28.05.2010, 05:25.
    Christian

    Comment


    • #3
      Aber der Fehler sollte auch nur auftauchen, wenn Du versuchst das erste mal lesend auf das Array zuzugreifen. Und dann auch nur wenn Du den Ausdruck ungültig auswertest.

      Der Speicherplatz ist ab
      Code:
      char komp_text[1000];
      reserviert. Das heisst Du kannst direkt danach bis zu
      Code:
      komp_text[999] = '\0';
      verwenden.

      Das einzige was ich mir vorstellen könnte ist, dass für String verarbeitende Routinen das Zeichen für "String Ende" '\0' fehlt. Im ersten Fall ist gleich der erste Wert ein '\0', da alles was in "" steht immer die Anzahl der Zeichen in der Klammern plus zusätzlich ein abschließendes '\0' bekommt. Aus diesem Grund sollte man für Strings, also alles was in "" steht, einen zusätzlichen Char vorhalten.

      Das z.B. würde scheppern, ausser es steht zufällig noch von alten Werte irgendwo ein '\0' drin:
      [highlight=c++]
      char test[1000]; //Im Array stehen Zufallswerte
      printf("%s",test); // Fehler -> kein '\0' -> printf sucht nach '\0' -> findet keins -> Grenzen des Arrays werden überschritten
      [/highlight]
      Macht man jetzt jedoch:
      [highlight=c++]
      char test[1000] = ""; //Im Array steht: '\0', Zufallswerte
      printf("%s",test); // printf findet '\0' -> Zeichenkette wird korrekt ausgegeben
      [/highlight]
      sollte eigentlich alles funktionieren

      Grundsätzlich kann man bei C++ immer nur dazu raten, dass Du die Variable immer gleich initialisierst wenn Du sie anlegst.

      Comment


      • #4
        Ich finds übrigens sehr toll, dass man sich hier nen Wolf tippt und dann nicht mal ein Danke oder überhaupt eine Antwort bekommt.

        In Zukunft werd ich mirs überlegen ob ich auf Super Crackers Threads nochmal antworte. Sowas ärgert mich.

        Comment


        • #5
          Ja sry bin bis jetzt noch nicht dazu gekommen deinen Beitrag zu lesen...
          Kann mich deinem Beitrag aber voll anschliesen!

          Originally posted by fanderlf View Post
          Aber der Fehler sollte auch nur auftauchen, wenn Du versuchst das erste mal lesend auf das Array zuzugreifen. Und dann auch nur wenn Du den Ausdruck ungültig auswertest.
          Mein Code is folgender gewesen:
          Code:
          char test[1000];
          for(i....)
          strcat (test,"anzuhaengender string"); //Die Funktion hängt den 2ten an den ersten an...
          Die Funktion strcat() sucht jetzt natürlich nach dem Stringende '/0' aber dieses gibt es natürlich noch nicht!

          Hab das bissi verraft weil ich gedacht hab die funktion hängt nur an (also schreibt nur)

          hoffe du schreibst mir auch weiterhin
          Danke Cracker0dks

          Comment

          Working...
          X