Verwendung von C-Strings



  • Mal 'ne ganz blöde Frage:

    Wenn ich nicht gerade per new ein Array dynamisch allokiere, muss ich dann bei der Verwendung von C-Strings immer ein Array statischer Länge angeben, oder kann ich auch einfach einen Pointer vom Typ char nutzen? Das funktioniert nämlich bis jetzt ohne weiteres, aber irgendwie habe ich da das Gefühl, dass da im RAM lustig Zeugs überschrieben wird mit der Methode.



  • Wenn Du nicht-statischen RAM benutzen willst, musst Du ihn auch allokieren.



  • hmm zeig doch einfach deinen momentanen Ansatz ... vllt kann man dann mehr darüber sagen was du noch nicht ganz so toll machst und was du schon gut machst 🙂



  • Einen konkreten Ansatz hab' ich gar nicht, das war mehr so eine theoretische Fragestellung.

    Aber es stimmt wohl, ich kann ja als Pointer höchstens die Position des Strings übergeben, aber um ohne Gefahr auf Fehler zu arbeiten, müsste ja auch die Länge bekannt sein, und das geht ja nur bei statischen oder dynamischen Arrays.

    Ich kann aber einen als statisches Array erzeugten C-String schon als Pointer vom Typ char weitergeben, oder?



  • C++-Anfänger schrieb:

    Aber es stimmt wohl, ich kann ja als Pointer höchstens die Position des Strings übergeben, aber um ohne Gefahr auf Fehler zu arbeiten, müsste ja auch die Länge bekannt sein, und das geht ja nur bei statischen oder dynamischen Arrays.

    Deswegen sind C-Strings auch null-terminiert 😉 (sprich: Der String geht von der im Zeiger gespeicherten Adresse bis zur ersten '\0' im Speicher)



  • Ja, klar, aber wenn ich einen String einfach von Anfang an als Pointer behandle, dann kann ja wer weiß was an der Stelle schon bestehen und überschrieben werden. Das sollte mir ja bei statischen Arrays eben nicht passieren.



  • Wenn du deine char-Pointer ordentlich Speicher zuweist (new) und wieder freigibst (delete[]) kann hier niemand etwas überschreiben. Ohne dem hast du undefiniertes Verhalten.



  • Könntest Du vielleicht einmal ein paar Zeilen Code posten, die zeigen, was Du genau treibst?
    Ich habe zwar eine recht konkrete Ahnung, aber trotzdem, nur um sicher zu gehen.


Anmelden zum Antworten