string und AnsiString



  • Moinsen zusammen,

    ich möchte ein Programm schreiben, welches sich aus zwei Teilen zusammen setzt:

    1. der Kern
    2. das GUI

    der Kern soll(te) nur in Standard C++ geschrieben sein um ihn möglichst unabhängig zu machen, während die GUI ruhig alle Vor-(und Nach-)-teile vom "BorlandStandard" haben darf.

    ich werde im Kern z.B. string (aus string.h) benutzen, und wahrscheinlich AnsiString in der GUI (warum wohl *g*) - meine Frage ist, ob jemand allgemeine Hinweise für den gemeinsamen Umgang mit beiden Typen hat. Wichtig hierbei:

    - Konvertierung (hin und zurück)
    - Fußfallen und sonstige Einschränkungen
    - häufige Fehler

    Eine Warnung vorab: Mit AnsiString habe ich schon sehr oft gearbeitet und string habe ich mir angelesen. Allerdings habe ich noch garnicht versucht die Beiden Typen zu "mixen" und möchte hier vorher nur einige Hinweise im Umgang ergattern 😉

    Danke schonmal und Frohe Ostern (wenns soweit ist)

    Beechen



  • Also soweit ich weiß ist das doch beides das gleiche oder nicht??? Steht zu mindest in der BCB-Hilfe...



  • Original erstellt von aaaabyx:
    Also soweit ich weiß ist das doch beides das gleiche oder nicht??? Steht zu mindest in der BCB-Hilfe...

    nein, es handelt sich dabei um 2 verschiedene Klassen, eine Borland spezifische (Delphi, BCB) und eine Standardisierte (ISO C++)

    BCB Hilfe:

    C++Builder implementiert den Typ AnsiString als Klasse. Die Funktionsweise von AnsiString entspricht dem langen String-Typ von Delphi. Entsprechend stellt AnsiString die nachstehenden Merkmale zur String-Bearbeitung bereit, die für den Aufruf von VCL-Funktionen erforderlich sind, welche mit den langen String-Typen von Delphi arbeiten.

    Referenzzähler
    String-Länge
    Daten
    NULL-Zeichen als Endemarkierung



  • Dachte ich nur, weil in der Hilfe steht dass es beides Delphi-Stringtypen (oder so) sind...



  • Es würde da folgendes gehen:

    AnsiString astr("Hallo String");
    string str( astr.c_str() );
    

    Und andersherum genauso. Ich sehe da eigentlich keine andere Möglichkeit...



  • Ich würde beides in einem Programm nicht mixen. OK, die Properties der VCL-Klassen kannst du natürlich nicht ändern, aber eigene lokale Variablen würde ich dann auch mit std::string machen, sonst kommst du zu leicht durcheinander.

    Die Properties musst du dann so setzen, wie WebFritzi schon geschrieben hat.

    BTW: Der richtige Header ist <string> und nicht <string.h>, der ist veraltet.

    @aaaabyx: Du verwechselst std::string und String.



  • BTW: Der richtige Header ist <string> und nicht <string.h>, der ist veraltet.

    AFAIK ist der Header der gleiche geblieben (der Name) - die Schreibweise hat sich nur verändert.



  • Nö, die Klassen aus <string> sind z.B. im Namespace std, die aus <string.h> nicht, um einen allgemeinen Unterschied zu nennen.

    <string.h> gehört einfach zu einer alten STL-Version.



  • Hast recht. Hab grad mal in die string.h reingeschaut. 😉


Anmelden zum Antworten