Int in AnsiString



  • Hallo

    Sei wann stammt AnsiString von std::string ab ? Die sprintf Methode stammt auch nicht von da, sondern aus seligen C-Zeiten und wurde lediglich adptiert.
    std::string kennt meines Wissens nach sprintf nicht.
    Kann es sein, dass du das mit dem Typ String von Pascal her verwechselst?



  • Auf das Geblubber bezüglich sprintf und std::string etc. geh ich nicht weiter ein. Braunstein hat das ja schon erledigt und er hat recht. Es gibt kein std::string::sprintf.

    Windoof schrieb:

    Ursprünglich stammt sie von std::string. Was diese Deinformation angeht: Ich habe nichts falsches gesagt

    Doch z.B. eben das gelaber wegen std::string. Das ist bereits zuviel desinformation. Plus noch einige weitere falsche Aussagen in anderen Threads. Zuviel Desinformation auf einem Haufen.

    Windoof schrieb:

    ich habe einige leute hier wiederholt, weil es scheinbar immernoch nicht klar war, welche Methoden die einfachsten sind.

    Du hast ihm ja keine gelegenheit gelassen, dem dezenten Hinweis nachzugehen, dass sprintf ebenfalls zu AnsiString gehört?

    Windoof schrieb:

    Aber jetzt hat sich der ghute Herr für AnsiString() entschieden, was ich auch genommen hätte, denn das kann man für fast jeden Standard-Datentypen nehmen, um ihn zu AnsiString zu konvertieren.

    Kann auch grausam ins Auge gehen, aber hey. Was interessiert dich das, ne? (o; Generische Konstruktoren sind nicht ohne. Aber woher sollst du das auch wissen.

    Windoof schrieb:

    Das mit dem "Heul doch" war nicht so persönlich gemeint, musst dich nicht gleich angegriffen fühlen,

    Hab ich mich nicht. Es war nur völlig deplaziert und unnötig.

    Windoof schrieb:

    ich finde nur, dass du dich zu sehr an sprintf() verbissen hast, eben typisch C-Programmierer.

    Der immerwieder auftretende Hinweis auf sprintf hat tiefere Gründe. Hat auch nix mit "typisch C-Programmierer" zu tun. Reines C hab ich schon seit jahren nichtmehr programmiert. Der Hintergrund liegt in der Erfahrung mit grösseren projekten, speziell ab dann, wenn sie multilingual werden sollen. Da werden dir Hardcodierte Strings wie sie hier oft propagiert werden mehr als nur Kopfschmerzen bereiten. Aber wie schon oben. Trotz deinem immer wieder besserwisserischen Auftreten, kannst dus ja nicht besser wissen, da du dich mit diesen Thematiken gar nie in den Wurzeln beschäftigen musstest.
    Tip: Manchmal stösst man in grösseren Projekten mit Komponenten an Grenzen, die sich nur mit etwas mehr programmtechnischem Aufwand lösen lassen.
    Aber klick du weiter ein Bischen deine Komponenten auf das Form und nenn dich Programmierer...

    -junix



  • Da habe ich nicht mit gerechnet eine derartige Diskussion mit dem sprintf auszulösen. Doch junix hat bereits auf Probleme mit Ansistring hingewiesen, denen ich nur beipflichten kann. Man muß sich immer vor Augen halten das AnsiString nicht einfach nur ein Datentype ist. Verwende doch mal AnsiString innerhalb einer Stuct und versuch die dann mittels UDP zu übertragen. Du wirst staunen 😕

    Evi48



  • Hi,

    junix schrieb:

    Generische Konstruktoren sind nicht ohne.

    was sind generische Konstruktoren?



  • junix schrieb:

    Aber klick du weiter ein Bischen deine Komponenten auf das Form und nenn dich Programmierer...

    Sorry, dass einem das Programmieren heutzutage einfacher gemacht wird, ich werd schon noch weitrgehen, außerdem ist C++ nicht das Einzige was ich mache, da kommt man schonmal durcheinander. Das mit sprintf(), da hab ich mich halt geirrt, sorry, aber dass du glei so drauf rumhacken musst... Du gehst immer davon aus, dass man gleich ein ganzen Betriebssystem programmieren will, und gibst gleich die kompliziertesten Funktionen rüber, die es gibt, obwohl man es sich einfacher machen kann, zumindest dann, wenn es nur um ein Taschenrechner geht oder so. Du sagst immer, dass man nicht mit Kanonen auf Fliegen schießen soll, dabei machst du es selbst. Ich kann programmieren, manchmal irre ich mich halt, irren ist menschlich, und außerdem habe ich auf Arbeit nur Delphi, und da gibts kein sprintf()... Und auch kein std::string.

    MfG Windoof



  • Windoof schrieb:

    junix schrieb:

    Aber klick du weiter ein Bischen deine Komponenten auf das Form und nenn dich Programmierer...

    Sorry, dass einem das Programmieren heutzutage einfacher gemacht wird,

    Die Tatsache, dass es einfacher wird, heisst nicht, dass man weniger dazu Wissen bzw. weniger Interesse zeigen sollte. Das Problem mit den Vereinfachung ist es, dass viele auf die Idee kommen, sie seien damit von der Grundlagenarbeit bzw. vom Lernen des Grundlagenwissens befreit.

    Windoof schrieb:

    ich werd schon noch weitrgehen, außerdem ist C++ nicht das Einzige was ich mache, da kommt man schonmal durcheinander.

    Vielleicht solltest du dich darauf konzentrieren ETWAS richtig zu lernen...?

    Windoof schrieb:

    Das mit sprintf(), da hab ich mich halt geirrt, sorry, aber dass du glei so drauf rumhacken musst...

    Ich - und nicht nur ich alleine - hab dir schon öfter gesagt, dass falsche oder halbrichtige Informationen massiv gravierender sind als gar keine Informationen.

    Windoof schrieb:

    Du gehst immer davon aus, dass man gleich ein ganzen Betriebssystem programmieren will,

    Siehst du: Schonwieder falsch.

    Windoof schrieb:

    und gibst gleich die kompliziertesten Funktionen rüber, die es gibt, obwohl man es sich einfacher machen kann,

    a) einfacher != besser bzw. einfach != hervorragend. Hier gilt das Selbe wie für das Codieren: Nur weils der Compiler frisst, ists noch lange nicht richtig.
    b) Softwareentwicklung umfasst mehr als nur Codieren. Wir alle versuchen hier das Niveau auf einem professionellen und informativen Level zu halten. Ich habe ja nicht gesagt, das was zuvor gesagt wurde sei absolut falsch: Ich habe lediglich eine weitere Möglichkeit aufgezeigt. Wirklich komplizierter wird das damit nicht. Jeder Anfänger lernt den Umgang mit printf. Und wer den nicht beherrscht, der sollte vielleicht nochmals etwas mehr Grundlagenarbeit betreiben.

    Windoof schrieb:

    zumindest dann, wenn es nur um ein Taschenrechner geht oder so.

    Windoof schrieb:

    Du sagst immer, dass man nicht mit Kanonen auf Fliegen schießen soll, dabei machst du es selbst.

    Windoof schrieb:

    Ich kann programmieren,

    Programmieren != irgendwelche Snippets zusammenklatschen.

    Windoof schrieb:

    manchmal irre ich mich halt, irren ist menschlich,

    Jepp. Aber im Unterschied zu dir, denkt jeder andere hier der auf einen Irrtum hingewiesen wird nochmals scharf über das gesagte nach, bzw. informiert sich,bevor er/sie sich vehement auf den Standpunkt stellt und ihn verteidigt als ob sein/ihr Leben davon abhängen würde. Bei dir jedoch ist es stets ein Hartnäckiges Beharren auf einem Irrtum, egal ob du jetzt als Spieleprogrammierer, N.D., Windoof oder sonst was postest.

    Windoof schrieb:

    und außerdem habe ich auf Arbeit nur Delphi, und da gibts kein sprintf()... Und auch kein std::string.

    Auch das wurde dir schon öfters gesagt: Bei Unsicherheit oder nicht Wissen: Schnautze halten!

    Ach was diskutier ich überhaupt noch hier. Ich habs dir oft genug zu erklären versucht, aber offensichtlich bist du völlig merkbefreit.

    Das führt hier auch definitiv zu weit. Deshalb ist an dieser Stelle schluss. Wenn du weiteren Diskussionsbedarf siehst, dann eröffne einen Thread im Neuigkeitenforum mit dem Titel "@junix" oder so. Auch dieses Verfahren wurde dir oft genug erklärt.

    Weitere OT Beiträge werden kommentarlos entfernt.

    -junix



  • Bitte lösch' diesen Beitrag nicht, junix. Ich wollt auch nochmal etwas dazu sagen.

    @Windoof: junix hat recht. Es kommt wirklich sehr häufig vor, dass du jemandem helfen willst (was ja nicht falsch ist), aber dann Zeugs postest, das einfach nicht stimmt. Versetz dich mal in die Situation des Fragenden. Speziell, wenn es ein Noob ist. Der glaubt dann, was du ihm erzählst. Möglicherweise setzt sich das dann noch in seinem Hirn fest. Ich kenne das selber. Ich bin fest der Überzeugung, dass das so und so war, schau nach, und dann stimmt's doch nicht. Ein Noob muss in kurzer Zeit viele Informationen fressen. Da ist es doch besser, die Infos sind alle richtig als wenn sich die eine oder andere falsche Info darunter befindet. Denk doch das nächste mal einfach nochmal drüber nach, ob es stimmt, was du im Begriff bist zu posten. Dann hackt hier auch keiner mehr auf dir rum, und du wirst ein akzeptiertes Mitglied der Community.
    Was dein Verhältnis zu junix angeht: Ich kann dich etwas verstehen - er kommt manchmal etwas arrogant oder hochnäsig rüber. Aber wenn er dich ankackt, dann ist es meist begründet und vor allem macht er sich dann die Mühe, dir zu erklären, was falsch war. Dabei kannst du dann lernen. Ich bin in der Vergangenheit auch oft mit junix aneinander geraten, aber ob du's jetzt glaubst oder nicht: es hat mir was gebracht - ich habe gelernt.

    @junix: Danke für die schönen Diskussionen 😉 Ich erinnere mich immer wieder gerne an den Disput, in dem es um public-Variablen ging. 🙂 👍



  • Nun gut, nach dem Offtopic (ist auch für Newbies interessant, davon lernen die auch) um Junix (mal wieder ?!? 😉 ?!?) und Windoof, auch wenn Aufschlußreich,
    gehen wir mal wieder zum Thema über:

    sprintf ist uns allen bekannt, zumindest den Erfahrenden. Was aber macht, ich sage
    jetzt mal, die Struktur AnsiString? Hat sich jemand mal gedanken darüber gemacht
    was die Funktion AnsiString.c_str() macht, oder viele andere ihrer
    Funktionen? Kann es sein das diese Funktionen ähnlich dieser sind die wir
    nach Standard C++ und C selbst proggen würden? AnsiString soll eine Erleichterung
    sein um mit Strings besser handtieren zu können, leider fallen uns immer
    wieder Wiedersprüche auf, wie hier diskutiert. Aber, so wie ich es verstanden
    und aufgenommen habe, soll AnsiString nur eine Erleichterung im Umgang mit
    Strings, innerhalb der VCL und Ihren Komponenten (und Co) sein, so das wir
    uns Char Buffers, Zeiger auf LPTCSTR etc. sparen können, man will es uns
    halt einfach machen, was ja der Sinn des BCB ist, aber wenn es darauf ankommt
    möglichst genau und sicher, so wie Exportive zu Arbeiten, müßen wir uns an dem
    Standard halten. UND wenn wir C++ gelernt haben und nicht CaP mit "zieh auf die Form",
    was hindert uns daran den Standard beizubehaleten und halt nicht einige Klassen
    und Strukturen der VCL zu verwenden?

    Wenn wir öffters mal auf gerade diesen Standards, auch hier im BCB (gerade hier) eingehen,
    erkennt so mancher Newbie das es doch Sinn macht mit C++Hello World
    anzufangen und nicht mit "AutoPlayer für Diablo" oder IplayAllMediaPlayer" etc.

    In diesem Sinne,
    Micha



  • junix schrieb:

    a) einfacher != besser bzw. einfach != hervorragend. Hier gilt das Selbe wie für das Codieren: Nur weils der Compiler frisst, ists noch lange nicht richtig.

    Das weiß ich, und das glaube ich dir sehr gerne, nur war das nicht gefragt. er wollte die einfachste Methode, nicht die effizienteste. Sorry, aber das musste ich nochmal loswerden.

    MfG Windoof



  • Hallo,
    auch wenn es die Neulinge vielleicht verwirrt, und vielleicht an der Frage vorbei, aber im Grundsatz hat sich dieser Thread vom eigentlichen Problem wegentwickelt, Der AnsiString ist die Nachbildung der Stringklasse von Pascal. Die muss im C++ Builder enthalten sein, damit die VCL angesprochen werden kann, da diese ja bekanntlich in Pascal implementiert ist. Es geht nicht darum, etwas für die BCB- Entwickler zu vereinfachen, denn dann hätte man die vorhanden C++- Klasse gekapselt und um Funktionen ergänzt. Auch TStringList, TDateTime, ... sind Typen, die innerhalb der VCL benötigt werden, und im C++ Builder daher nachgebildet werden mussten. Und genauso mussten ja in Delphi Klassen und Funktionen geschrieben werden, um mit der Windows-API zusammenzuarbeiten, die ja bekanntlich in C/C++ geschrieben ist, und daher die Pascal- Typen nicht versteht. Wenn man jetzt überlegt, wie Pascal mit Strings umgeht, dann war der etwas mit dem ersten Element, in dem die Länge gespeichert wird. C/C++ machen das auch nicht, es erzeugt auch für die Programmierungen einen unverhältnismäßig grossen Aufwand, immer diese Längeangabe zu pflegen. Hier wird einfach eine binäre Null ans Ende geschrieben.

    Gerade die Verwendung dieser Delphi- Typen bringt aber die Abhängigkeiten zum BCB, aus denen man nur sehr schwer herauskommt. Dabei hat doch C++ alles. Es gibt da tatsächlich einen eigenen string- Typ, man muss ja nicht mit lowlevel- Funktionen kämpfen. 😉 Vielleicht einfach einen ostrstream nehmen, und entsprechend ausgeben? Ich denke, man sollte mit dem BCB programmieren, und nicht, wie es leider auch aus dieser Diskussion herausklingt, für den BCB.

    Aber eines stimmt auch noch in diesem Thread, auch wir haben viel Zeit in die Internationalisierung von Anwendungen gesteckt. Hier ist die alte Methode mit sprintf tatsächlich die einfachste, da die Satzstellungen in verschiedenen Sprachen unterschiedlich sind, und ich nur eine Zeichenkette speichern muss, die dann mit Parametern aufgefüllt wird. Und damit zum Problem der Frage und einiger Antworten hier, was ist die einfachste Methode, nach der gefragt wurde? Die Antwort hängt doch von so vielem ab, muss die Anwendung mal portiert werden, muss sie mal internationalisiert werden, arbeit sie mit anderen Bibliotheken zusammen, ... Es wäre doch zu schön, wenn es immer eine "einfache" Methode geben würde.

    Schöne Grüße aus Berlin

    Volker


Anmelden zum Antworten