Funktion zum ändern einer Dateiendung



  • Was hat das damit zu tun, was DEINE Funktion annimmt, bzw. zurückgibt?



  • Heißt das also, ich kann meine Klasse praktisch komplett mit wstrings coden, muss aber jeweils den member c_str() benutzen, um die wstring's dann in die für die einzelnen c funktionen nötigen wchar_t's zu konvertieren?

    Das wäre natürlich absolut kein Problem, allerdings würd ich gerne noch ne Möglichkeit wissen, wie ich das ganze mit den C Strings (wchar_t) lösen kann.

    Dann würde ich nämlich jeweils 2 Funktionen schreiben, von denen die eine die wstrings frisst und die andere Funktion dann die wchar_t's.



  • Soulzter schrieb:

    Dann würde ich nämlich jeweils 2 Funktionen schreiben, von denen die eine die wstrings frisst und die andere Funktion dann die wchar_t's.

    Und was bringt das?

    Arrays sind mühsam. Das merkst du alleine schon daran, dass du sie in deiner Funktion nicht als Rückgabetypen verwenden kannst. Und du musst dich auf eine willkürliche Länge MAX_PATH festlegen. Zudem befinden sich die ganzen _s -Funktionen nicht im C++-Standard.



  • Also sollte ich schauen, dass ich mit ner referenz in der funktion arbeite. Richtig?

    Ich soll aber die _s Funktionen benutzen, um die ganzen unsafe-warnungen zu umgehen, die mir mein Compiler ausgibt. Das müsste doch heißen, solange man auf Windows als Platform bleibt, sind die _s Funktionen kein Problem, richtig?



  • Soulzter schrieb:

    Also sollte ich schauen, dass ich mit ner referenz in der funktion arbeite. Richtig?

    Nein. Du übergibst ja schon Zeiger, auch wenn sie in der Parameterliste wie Arrays aussehen.

    Soulzter schrieb:

    Ich soll aber die _s Funktionen benutzen, um die ganzen unsafe-warnungen zu umgehen, die mir mein Compiler ausgibt.

    "unsafe" kommt daher, wenn du über den Puffer hinausschreibst, also dir nicht über die Stringlängen im Klaren bist. Du legst dich dabei immer auf eine bestimmte (willkürliche) Länge fest.

    Das sind wiederum alles Probleme, die man mit std::wstring nicht hat... Überhaupt hättest du einen Bruchteil des Codes, wenn du die Memberfunktionen rfind() und replace() verwenden könntest.



  • Birgt nicht std::wstring einen gewissen Geschwindigkeitsverlust?
    Und lässt sich std::wstring genau so mit MAX_PATH als Länge initalisieren?



  • Soulzter schrieb:

    Birgt nicht std::wstring einen gewissen Geschwindigkeitsverlust?

    Die dynamischen Allokationen sind vielleicht etwas langsamer. Aber ich habe sehr grosse Zweifel, dass es bei dir genau auf diesen Unterschied ankommt, sodass sich hässlicher Code deswegen lohnen würde.

    Soulzter schrieb:

    Und lässt sich std::wstring genau so mit MAX_PATH als Länge initalisieren?

    Grundsätzlich ja, aber da MAX_PATH nur notwendiges Übel ist, um keine Pufferüberläufe zu haben, ist das gar nicht nötig. std::wstring reserviert sich den benötigten Speicherplatz automatisch.



  • Und ich kann std::wstring von der Funktion ausgeben lassen, ohne es nachher mit delete oder free "töten" zu müssen, richtig?

    Das heißt ich brauche mich nicht um eine Garbage Collection kümmern?



  • Soulzter schrieb:

    Und ich kann std::wstring von der Funktion ausgeben lassen, ohne es nachher mit delete oder free "töten" zu müssen, richtig?

    Richtig. Das ist ein wesentlicher Vorteil von Containern.

    Du kannst std::wstring -Objekte auch normal kopieren, zuweisen, an Funktionen übergeben und von ihnen zurückgeben. All die Spezialbehandlungen und impliziten "Features" von Arrays entfallen, du hast ganz normale Wertsemantik wie z.B. bei int .



  • Okay besten Dank!

    Damit hast du mir sehr geholfen!


Anmelden zum Antworten