Hallo zusammen, bin noch Einsteiger und habe ein kleines problem ich möchte einen String in ein char convertieren. diesen char möchte ich dann ausgeben. Am Seriellen Monitor sehe ich aber nichts. String input = "Hallo test"; int input_len = input.length() + 1; char char_array[input_len]; input.toCharArray(char_array, input_len); Serial.println(char_array); Woran liegt das?
Eva T. schrieb: > MaWin schrieb: >> Welche Sprache? > > Arduino Arduino ist keine Sprache! Diese es heißt C++, und auch ein bisschen C und ASM gibts da ebenfalls. Warum nicht einfach:
1 | Serial.println(input); |
EAF schrieb: > Warum nicht einfach: ich möchte zu dem input noch etwas dazu schreiben. Also eigentlich ausgabe = input + char_array
Eva T. schrieb: > ich möchte zu dem input noch etwas dazu schreiben. Eva T. schrieb: > ich möchte zu dem input noch etwas dazu schreiben. Was hindert dich?
Strings kannst du direkt verketten: https://myhomethings.eu/de/arduino-string-objekte/ Für eine Ausgabe ist aber selbst das Verketten unnötig kompliziert. Mache einfach zwei Ausgaben nacheinander: Serial.print(input) Serial.println(char_array)
Ohne Italien fahren wir zur WM schrieb: > memcpy mit string.c_str() ? Wozu? Hier mal zum mitmeißeln:
1 | #include <Streaming.h> // die Lib findest du selber ;-) |
2 | Print &cout = Serial; // cout Emulation für "Arme" |
3 | |
4 | |
5 | String input = "Hallo test"; |
6 | |
7 | void setup() |
8 | {
|
9 | Serial.begin(9600); |
10 | cout << F("Start: ") << F(__FILE__) << endl; |
11 | |
12 | |
13 | String ausgabe = input + " und nochwas"; |
14 | cout << ausgabe << endl; |
15 | }
|
16 | |
17 | void loop() |
18 | {
|
19 | |
20 | }
|
EAF schrieb: > Arduino ist keine Sprache! "Die Programmierung selbst erfolgt in einer C- bzw. C++-ähnlichen Programmiersprache, wobei technische Details wie Header-Dateien vor den Anwendern weitgehend verborgen werden" https://de.wikipedia.org/wiki/Arduino_(Plattform)
Georg M. schrieb: > . C++-ähnlichen Programmiersprache Nicht ähnlich. Sondern C++! Wie kann ich dir das beweisen?
https://arduinogetstarted.com/de/reference/arduino-string-tochararray Extra für den TO gegoogelt :) Bin lieb heute ;) Wieso können die Kiddys nicht mehr google benutzen. google starten. arduino string to char array <- eingeben (wird zu hälfte vorgeblendet) Dann !!! Suchfilter = Seiten auf Deutsch. Bei mir der erste Treffer. Ich bin echt lieb heute. tztztz
Schlaumaier schrieb: > Wieso können die Kiddys nicht mehr google benutzen. Muss man das?!? Können die anderen heute nicht mehr miteinander Kommunizieren und googeln nur noch!? ;-) Denk mal drüber nach:-) Eigentlich ist dieser Weg doch der bessere, meinst Du nicht? Egal wie oft eine Frage schon gestellt wurde. Würdest Du Deinem Kind, wenn es dich fragst, ach so antworten" Google es doch, kannst du das nicht" Nenene
Peter K. schrieb: > Können die anderen heute nicht mehr miteinander Kommunizieren und > googeln nur noch!? ;-) > Denk mal drüber nach:-) Habe ich. Und ich halte mich an den alten Spruch meiner Mutter "Hilf dir selbst, dann hilft dir Gott". !!! Das nennt man selbstständiges Denken und recherchieren. !!!! Und das kann keiner mehr. Klar es gibt Fragen wo auch eine längere Suche im Netz o. Büchern keine Antwort bringt. Dann muss man Fachleute suchen. Aber wie ich immer sage : "Wenn ich wirklich mal ein Problem habe und nicht weiter weiß ist es sehr schwer ein zu finden, der da wirklich Plan hat." Was NICHT bedeutet das ich alles weiß. Nur 99% der Infos die man braucht kann man sich selbst beschaffen. Und das 1 % ist das Problem. Oder wie man im Wilden Westen sagte : "Es gibt sicher ein der schneller ist wie ich, aber denn muss man erst finden". ;) Ach nur so Nebenbei. Ich habe so 22 Jahre auf der Firma allein gearbeitet. Der Chef o. wer auch immer, kam in mein Büro und schilderte das Problem. Ich arbeitete die Lösung aus. Und JA ich habe dafür viel Telefoniert und später google + Co. benutzt.
Die Kiddys von heute googeln nicht mehr - das war gestern. Die suchen auf TikTok. Selbst erlebt.
Torsten S. schrieb: > Die suchen auf TikTok. die suchen die Dummen die für sie arbeiten regelmäßig hier!
"Das nennt man selbstständiges Denken und recherchieren. !!!! Und das kann keiner mehr." Vielleicht schlussfolgerst Du das nur? Und die Generation sucht einfach wieder meh den zwischenmenschlichen Kontakt Aber so oder so, ist es ja auch nicht schlimm, wenn man einfach fragt und nicht recherchiert. Der eine so, der Andere so. Die Welt ist ja nicht nur S/W, abgesehen tut es keine Weh, es entsteht keinerlei Schaden. Also, sei's drum
Ist es wirklich schon soweit? Denken die Leute jetzt tatsächlich schon, "Arduino" wäre eine eigene Sprache?
Georg M. schrieb: > EAF schrieb: >> Wie kann ich dir das beweisen? Ich habe dich gefragt, wie ich dir das beweisen kann..... Ich habe dich nicht aufgefordert irgendwelchen Blödsinn nach zu plappern. Hier ein Nachweis:
1 | #include <Streaming.h> // die Lib findest du selber ;-) |
2 | Print &cout = Serial; // cout Emulation für "Arme" |
3 | |
4 | void setup() |
5 | {
|
6 | Serial.begin(9600); |
7 | cout << __cplusplus << endl; |
8 | }
|
__cplusplus ist KEIN Arduinobestandteil, sondern stammt aus der GCC Toolchain Das Programm sagt bei mir: 202100 (das kann bei dir was anderes zeigen)
Dieter schrieb: > Denken die Leute jetzt tatsächlich schon, > "Arduino" wäre eine eigene Sprache? Offensichtlich! Ich finde die Aussage in der Arduino Doku schon arg bedenklich.
Leute : Ihr habe BEIDE Recht. Ist das selbe wie BASIC. Basic gibt es ein Ewigkeiten. ABER !!. In jeder Compilerversion werden Dinge verändert. Einer meiner Lieblingsbefehle war RIGHT$(y,x). z.b. tx$ ="hundeklo" : a$ = right(tx$,3) dann ist a$ "klo" Der Befehl wurde in VB-2010 abgeschafft, und ich habe ihn via Funktion nachbilden müssen. Mit Arduino-C und "richtigen" C ist es das selbe. Grundsätzlich ist C = C , wie Basic = Basic ist. Aber viele Funktionen/ Befehle werden in Arduino-C nicht unterstützt. Also ist die Aussage auf der Homepage richtig. Wenn ich ein BASCOM - Programm in mein VB lade, sagt der Compiler auch nur "WOT" ?!?! :;) Die Syntax ist zwar innerhalb der Programmiersprache gleich aber der Rest .......... .
Schlaumaier schrieb: > Aber viele Funktionen/ Befehle werden in Arduino-C nicht unterstützt. Welche? Sowohl C und auch C++ stehen vollständig zur Verfügung. Einzig auf AVR fehlt die libstc++, aber das ist eine Einschränkung der Toolchain, welche genauso für alle anderen IDEs zutrifft, welche AVR-GCC verwenden. Schlaumaier schrieb: > Also ist die Aussage auf der Homepage richtig. Ja? Woran machst du das fest?
Peter K. schrieb: > Schlaumaier schrieb: >> Wieso können die Kiddys nicht mehr google benutzen. > > Muss man das?!? Sollte man heutzutage auf jeden Fall können, ja. Früher gingen die Menschen in eine Buchhandlung und haben da versucht, Bücher zu finden, die die Informationen enthalten und diese dann gekauft. Das war mühsam, umständlich und kostete Geld. Heute ist es einfacher denn je, kostenlos an fast alle erdenklichen Informationen zu kommen, und ich habe den Eindruck, dass es gerade z.B. in Foren wie hier sehr viele Menschen gibt, die dazu dennoch nicht in der Lage sind und stattdessen alles nachfragen müssen. > Können die anderen heute nicht mehr miteinander Kommunizieren und > googeln nur noch!? ;-) Darum geht es doch gar nicht. Natürlich kann und soll man kommunizieren, aber das heißt doch nicht, dass man sich jetzt selbst die simpelsten Dinge von anderen erklären lassen muss. Als 6-jähriges Kind macht man sowas, aber doch nicht als Erwachsener. > Eigentlich ist dieser Weg doch der bessere, meinst Du nicht? Egal wie > oft eine Frage schon gestellt wurde. Nein. > Würdest Du Deinem Kind, wenn es dich fragst, ach so antworten" Google es > doch, kannst du das nicht" Es geht nicht um Kinder. Dieter schrieb: > Ist es wirklich schon soweit? Denken die Leute jetzt tatsächlich schon, > "Arduino" wäre eine eigene Sprache? Das ist eben das, was die Arduino-Hompeage versucht, ihnen einzureden. Da wird sehr gut versteckt, dass es eigentlich C++ ist. Wenn jemand so seinen ersten Kontakt mit dem Thema Programmierung hat und dort überall nur von der "Arduino programming language" liest, wie soll der auf die Idee kommen, dass es sich in Wirklichkeit um C++ handelt?
:
Bearbeitet durch User
"Sollte man heutzutage auf jeden Fall können," Noch mal....kann es sein das Du hier übereilt falsche Schlussfolgerungen ziehst? Niemand sagt, dass er es nicht könnte und Du weißt es nicht, im Grunde kann es dir auch völlig egal sein. Wenn Du einfach mal Googeln benutzen würdest...dort steht "Ist Arduino C oder C++? Syntaktisch basiert Arduino auf C, wodurch die Einbindung von C Libraries möglich ist. Dennoch befindet sich die Sprache Arduino eine Ebene höher als C/C++ und ermöglicht eine direkte Einbindung von Hardware Komponenten ohne den Einsatz von Hardwareadressen." Und wenn Du jetzt behauptest das diese Aussage falsch wäre, dann seihst Du, weshalb direkte Kommunikation besser ist, als stundenlang von A nach B zu goggeln um die antworten von Googel erst verifizieren zu müssen...
Da schreiben wieder irgendwelchen Marketing Menschen einen Blödsinn zusammen. Diese "Arduino programming language" ist einfach ein Hardware Abstraction Layer ("HAL") die in C/C++ geschrieben ist. Und es erlaubt die gleichen C/C++ Funktionen auf unterschiedlicher Arduino Hardware zu verwenden. z.B. AVR (Uno/Leonardo/Mega,... ), ARM (Due), Xtensa LX6 (ESP) oder auch x86 (Genuino 101).
Jepp, mir ist das klar und Dir, aber der Neuling der danach googelt bekommt diese Antwort. Mir ging es nu um dieses "Kann die Jugend nicht mehr selber googeln" Ich hoffe, jetzt wird klarer, wieso es auch noch andere Lösung als Google gibt:-)
Peter K. schrieb: > Syntaktisch basiert Arduino auf C, wodurch die Einbindung von C > Libraries möglich ist. Das klingt unlogisch. Denn: Die meisten Arduino Libraries sind in C++ abgefasst. Kann man C++ Quellcode/Libs direkt in C einbinden? Nein! (nicht ohne Wrapper zu bauen) Anders rum allerdings, durchaus ja. Peter K. schrieb: > Dennoch befindet sich die Sprache Arduino eine > Ebene höher als C/C++ und ermöglicht eine direkte Einbindung von > Hardware Komponenten ohne den Einsatz von Hardwareadressen." Das ist eben so unlogisch! Wie will man irgendeine Hardware ansprechen können, ohne sie zu "adressieren"? Ja, für Furz und Feuerstein gibt es Libraries, in der Arduino Welt. Diese sind in den allermeisten Fällen in C++ abgefasst und adressieren sehr wohl die Hardware. Das ist ihr Job. Es gibt einen einzigen Punkt, wo man evtl. ansetzen können um Arduino als eigene Sprache zu betrachten: Der Builder ist nicht nur ein Make Ersatz/Äquivalent, sondern klebt auch alle *.ino Dateien aneinander und jagt noch einen Präprozessor über das Resultat. In dem Resultat wird ein
1 | #include <Arduino.h> |
an den Anfang gesetzt. Es werden Vorwärtsreferenzen für die Funktionen angelegt (Prototypen), welche in den INO Dateien definiert sind. Das sind die einzigen Änderungen, die eine *.ino Datei von einer *.cpp Datei unterscheidet. Oder anders: So wird eine *.ino zu einer *.cpp. *.h, *.c, *.cpp und *.S Dateien werden dem Compiler/Assembler unverändert übergeben.
Peter K. schrieb: > Dennoch befindet sich die Sprache Arduino eine > Ebene höher als C/C++ und ermöglicht eine direkte Einbindung von > Hardware Komponenten ohne den Einsatz von Hardwareadressen." Das ist Marketing Geschwurbel. Denn das geht sowohl in C als auch in C++ mit ganz normalen Bibliotheken. Die Arduino Bibliotheken sind ganz normale Bibliotheken. EAF schrieb: > Der Builder ist nicht nur ein Make Ersatz/Äquivalent, sondern ... So sehe ich das auch. Arduino hat einen Build Prozessor gebaut, aber keine neue Programmiersprache eingeführt.
Wer belastbare Informationen über den Build Process haben möchte sollte dieses lesen: https://arduino.github.io/arduino-cli/0.20/sketch-build-process/ Des weiteren finden sich dort, hinter den anderen Menüpunkten, umfangreiche Informationen über den Aufbau von Libs und Hardwaredefinitionen usw. Ich kann nur jedem raten, wer sich etwas tiefer mit Arduino beschäftigen möchte, das alles einmal durchzulesen.
Faden kapern und Frolleinchens erschrecken - ihr seid mir ja wahrlich "Männer vom Welt" ...
Schlaumaier schrieb: > Ist das selbe wie BASIC. Basic gibt es ein Ewigkeiten. > ABER !!. In jeder Compilerversion werden Dinge verändert. Ist es nicht, Arduino hat den Compilern absolut gar nichts verändert.
Eva T. schrieb: > ich möchte zu dem input noch etwas dazu schreiben. > Also eigentlich > ausgabe = input + char_array String input; char x[] = "123"; input = "Hallo "; input += x; input += 456; Serial.println(input.c_str()); Ausgabe: Hallo 123456 Schau dir mal die Arduino Doku an
Peter schrieb: > So: > > String input = "Hallo test"; > Serial.println(input.c_str()); Neee!!!! Serial.println(input); Reicht voll kommen! Aber: Eva T. schrieb: > ich möchte zu dem input noch etwas dazu schreiben. Also: Serial.println(input + " was anderes");
EAF schrieb: > Serial.println(input + " was anderes"); Aber so belegt du einen temporären Puffer, der die beiden Teilstrings aufnimmt. Wenn man sie einzeln ausgibt (mit print() und println()), spart man sich das. Je nach dem wie wenig RAM der Mikrocontroller hat, lohnt sich das.
Stefan F. schrieb: > Aber so belegt du einen temporären Puffer, der die beiden Teilstrings > aufnimmt. Ja und? Ja es wird ein Buffer auf dem Heap angelegt! Aber dank RAII auch wieder abgebaut. Also: Nullsumme, in Sachen Speicher. Stefan F. schrieb: > Wenn man sie einzeln ausgibt (mit print() und println()), > spart man sich das. Finde ich unschön, bevorzuge darum sowas:
1 | String input = "Hallo test"; |
2 | cout << input << " space " << " was anderes" << endl; |
3 | |
4 | oder auch: |
5 | char *input = "Hallo test"; |
6 | cout << input << " space " << " was anderes" << endl; |
Das ganze kann man noch mit F() PSTR und PROGMEM usw. garnieren, wenn man denn RAM freischaufeln will.
EAF schrieb: > Ja und? > Ja es wird ein Buffer auf dem Heap angelegt! > Aber dank RAII auch wieder abgebaut. Mache das mal mit einer HTML Seite, dann lernst du schnell die Grenzen der kleinen AVR Mikrocontroller kennen. Daran sind sogar schon Leute auf ESP8266 gescheitert. Ich habe nicht umsonst geschrieben: "Je nach dem wie wenig RAM der Mikrocontroller hat, lohnt sich das." Dein Vorschlag mit cout ist meinem ähnlich, weil dabei ebenfalls die Teile nacheinander ausgegeben werden, anstatt sie erst temporär zusammen zu kopieren.
Stefan F. schrieb: > Mache das mal mit einer HTML Seite, dann lernst du schnell die Grenzen > der kleinen AVR Mikrocontroller kennen. Das ist doch gar nicht das Thema hier! Im Eingangsposting wird ein Buffer angelegt Und auch alle anderen hier gezeigten Vorschläge mit memcpy() und strcpy() usw. benötigen Buffer! Klar du willst mal wieder recht haben, verstehe ich auch. Allerdings braucht "Textverarbeitung" IMMER Buffer. Auf µC und auch auch dickeren Kesseln. Nur Magier kommen immer ohne aus. Z.B. du. Am Rande: String belegt den Buffer auf dem Heap, drum passt da z.B. beim ESP32 viel mehr rein, als man auf dem Stack unterbringen kann. FreeRTOS begrenzt den Stack Im Eingangsposting wird Stack belegt, ist somit kritischer.
EAF schrieb: > Allerdings braucht "Textverarbeitung" IMMER Buffer. Aber die Textausgabe mittel Serial.print() und println() ist bereits gepuffert. Man gewinnt nichts damit, noch einen weiteren puffer davor zu packen. Man verschwendet nur RAM, der eventuell (kommt auf die Anwendung an) knapp ist. EAF schrieb: > Im Eingangsposting wird Stack belegt, ist somit kritischer. Da stimme ich dir zu.
Stefan F. schrieb: > Aber die Textausgabe mittel Serial.print() und println() ist bereits > gepuffert. Man gewinnt nichts damit, noch einen weiteren puffer davor zu > packen. Du möchtest HTML über Serial ausliefern? Interessant, wie du doch fleißig die Problemstellung deiner Argumentation anpassen kannst. Bewundernswert! Im ernst: Ist doch schön, wenn du auf jegliche Buffer verzichten kannst. Meine Glückwünsche, und meinen Segen! PS: Du könntest mir jetzt auch noch erzählen, dass die Erde kugelig ist, und keine Scheibe! Da hat zwar keiner nach gefragt, und ich auch nie was gegenteiliges behauptet... Aber sowas hält dich ja nicht von einer Belehrung ab, oder?
EAF schrieb: > Klar du willst mal wieder recht haben, verstehe ich auch. > Allerdings braucht "Textverarbeitung" IMMER Buffer. > Auf µC und auch auch dickeren Kesseln. > Nur Magier kommen immer ohne aus. > Z.B. du. Ich finde jetzt nicht, dass es Magie ist, wenn jemand zwei Strings vor der Ausgabe nicht erst zu einem zusammen kopiert, sondern direkt separat ausgibt. Und er hat doch Recht: man spart sich bei der zweiten Variante den sonst nötigen Speicher für den zusätzlichen String, was auf µCs je nach Typ schon sinnvoll sein kann. Das hat auch nichts damit zu tun, ob für den seriellen Port irgendwo ein Puffer existiert.
>> Aber die Textausgabe mittel Serial.print() und println() ist bereits >> gepuffert. Man gewinnt nichts damit, noch einen weiteren puffer davor zu >> packen. EAF schrieb: > Du möchtest HTML über Serial ausliefern? > Interessant, wie du doch fleißig die Problemstellung deiner > Argumentation anpassen kannst. > Bewundernswert! Du lenkst ab. Es geht um einen Ratschlag, wie er RAM sparen kann, falls er es braucht. Für euch ewigen Nörgler haben ein konkretes Beispiel genannt, dass direkt einleuchtet. Kennst du etwa nicht diese Boards mit AVR und ESP8266, wo die beiden seriell kommunizieren? https://www.elektormagazine.de/news/mein-weg-ins-iot-10-das-pretzel-board https://forum.arduino.cc/t/atmega328p-esp8266-wifi-tutorial/944380 Na egal, dann halt nicht. Unkenntnis ist jedoch kein Grund, sich über andere Lächerlich zu machen. Dein Verhalten ist lächerlich, zudem es deutlich offenbart, dass du kein erfahrener Programmierer bist. Auch in anderen Szenarien muss man manchmal sparsam mit RAM umgehen und kann nicht einfach beliebig lange Zeilen zusammen kopieren um sie an einem Stück auszugeben.
Rolf M. schrieb: > Ich finde jetzt nicht, dass es Magie ist, wenn jemand zwei Strings vor > der Ausgabe nicht erst zu einem zusammen kopiert, sondern direkt separat > ausgibt. Und er hat doch Recht: man spart sich bei der zweiten Variante > den sonst nötigen Speicher für den zusätzlichen String, was auf µCs je > nach Typ schon sinnvoll sein kann. Hast du vielleicht gesehen, dass ich genau so ein Beispiel auch vorgeführt habe? Nein? Dann bitte Augen auf! Habe ich irgendwo gesagt, man(oder Frau) müsse unbedingt unnötige Buffer anlegen? Man man man.... Im Eingangsposting wird nach der Verknüpfung 2er Strings gefragt, vor der Ausgabe. Dazu kamen viele Aussagen, die String völlig unnötig zu C-strings konvertieren wollten, sogar mit memcpy() usw. Dadrauf bezieht sich mein erstels Beispiel, auf dem das Stefan Dingen dann angesprungen ist um mein mich kritisieren zu müssen. Stefan F. schrieb: > Du lenkst ab. Es geht um einen Ratschlag, wie er RAM sparen kann, > falls er es braucht. Offensichtlich nicht ER, sondern SIE! Und warum ist der "Vorschlag" dann an mich adressiert, in Form eine Kritik? Weil du Streit haben willst? Stefan F. schrieb: > Na egal, dann halt nicht. Unkenntnis ist jedoch kein Grund, sich über > andere Lächerlich zu machen. Dein Verhalten ist lächerlich, zudem es > deutlich offenbart, dass du kein erfahrener Programmierer bist. Ich danke dir dafür! Zu Belohnung, hast du mich ernsthaft sauer gemacht. Wenn du das erreichen wolltest, dann hast du damit Erfolg! Tipp: Genieße deine momentanen Glücksgefühle, die werde ich dir schon noch austreiben. Und zwar fachlich und gewürzt mit einer gehörige Ladung Verachtung. Das möchtest du doch.....
EAF schrieb: > Dadrauf bezieht sich mein erstels Beispiel, auf dem das Stefan Dingen > dann angesprungen ist um mein mich kritisieren zu müssen. Korrektur: Darauf bezieht sich mein Beispiel, auf dem das Stefan Dingen dann angesprungen ist um mich kritisieren zu wollen.
EAF schrieb: > Zu Belohnung, hast du mich ernsthaft sauer gemacht. > Wenn du das erreichen wolltest, dann hast du damit Erfolg! > > Tipp: > Genieße deine momentanen Glücksgefühle, die werde ich dir schon noch > austreiben. > Und zwar fachlich und gewürzt mit einer gehörige Ladung Verachtung. > Das möchtest du doch..... Ich glaube fast, hier ist Testosteron im Spiel. - face plant -
EAF schrieb: > Nicht ähnlich. > Sondern C++! > Wie kann ich dir das beweisen? Mir fällt dazu ein Dialog aus "Kingdom o Magic" ein: Thidney trifft einen Ork und sagt "Oh, ein Goblin". Der Ork drauf (zornig); "Ich bin kein Goblin, sndern ein ORK!". Darauf Thidney: "Ist doch dasselbe, nur größer und häßlicher!" Hier gab's ja auch Leute, die nicht in Pascal, sonden in Delphi programmierten. Frohe Weihnacht! W.S.
W.S. schrieb: > Hier gab's ja auch Leute, die nicht in Pascal, sonden in Delphi > programmierten. Das sind immerhin zwei weit auseinander liegende Versionen mit unterschiedlichen Features. Arduino hat aber weder eine eigene Sprache noch einen eigenen abgespeckten Compiler. Es ist der Ork in seiner vollen Größe.
Eva T. schrieb: > Hallo zusammen, bin noch Einsteiger und habe ein kleines problem > ich möchte einen String in ein char convertieren. Versuche vorher, mal das Ganze zu verstehen. Also ein char ist gemeinhin irgend ein Textzeichen, also irgend etwas Druckbares. In C kann man damit auch rechnen, weil die Erfinder von C unter 'char' eigentlich das Byte verstehen wollten und es somit als kleinstes Integerformat gilt. Strings gibt es in C nicht. Punkt. Stattdessen gibt es Felder von Bytes, wo man Bytes aka char's hineintun kann und um das Ende davon zu kennzeichnen, fügt man anschließend ein Nullbyte dran. Das, was du als String betrachtest, ist also eine Folge von Bytes, gefolgt von einem Byte, was 0 ist. Und das sind mehrere Bytes (aka char's) und nicht bloß ein char. So eine von dir beabsichtigte Konvertierung kann also prinzipiell nicht funktionieren. Eva T. schrieb: > String input = "Hallo test"; Versuche mal, auch das zu verstehen. Du deklarierst also eine Variable, die folglich ins RAM kommt (wir sind hier ja bei den Mikrocontrollern) und die soll die Zeichenfolge Hallo test enthalten. Wer bittesehr soll das in den RAM stopfen? Vielleicht sagst du jetzt "der Startup-Code soll mir das machen", also schau in den Startupcode, ob der sich wirklich darum kümmert und schau in die von deiner Toolchain erzeugte Datei, ob da wirklich die Anweisungen dazu drinstehen. Willst du nicht, weil es dir zu kompliziert ist? Dann verlaß dich nicht drauf, sondern mache es anders. Ohne solche Umwege wie Kopieren von einem RAM-Bereich in einen anderen. Was passiert bei dir eigentlich, wenn du folgendes schreibst: Serial.println("Hallo test"); Das wäre doch wohl das, was du von deinem Programm haben willst. W.S.
Es geht um das Verketten von Strings und Zeichenketten in Arduino, um sie zusammen am Stück auszugeben. Strings sind C++ Objekte. Auf die zugehörige Dokumentation wurde bereits verwiesen. Mehrere Möglichkeiten wurden erörtert, und die Notwendigkeit der Verkettung wurde hinterfragt. Und dann kommst du: W.S. schrieb: > Das, was du als String betrachtest, ist also eine Folge von Bytes, > gefolgt von einem Byte, was 0 ist. Du hast mal wieder Null Ahnung von der Sache und zudem nicht gelesen, was andere vor dir schrieben. Die Frage des TO hast du nicht einmal ein bisschen beantwortet. Den unpassender Beitrag stiftet nur Verwirrung. Ich hatte mal eine hohe Meinung von dir, aber deine Beiträge werden immer sinnloser. Was ist los?
EAF schrieb: > Rolf M. schrieb: >> Ich finde jetzt nicht, dass es Magie ist, wenn jemand zwei Strings vor >> der Ausgabe nicht erst zu einem zusammen kopiert, sondern direkt separat >> ausgibt. Und er hat doch Recht: man spart sich bei der zweiten Variante >> den sonst nötigen Speicher für den zusätzlichen String, was auf µCs je >> nach Typ schon sinnvoll sein kann. > > Hast du vielleicht gesehen, dass ich genau so ein Beispiel auch > vorgeführt habe? Ich sehe von dir das hier: EAF schrieb: > Eva T. schrieb: >> ich möchte zu dem input noch etwas dazu schreiben. > > Also: > Serial.println(input + " was anderes"); > Habe ich irgendwo gesagt, man(oder Frau) müsse unbedingt unnötige Buffer > anlegen? Nein, aber du hast gesagt, dass es egal sei, wenn man das tut: EAF schrieb: > Ja und? > Ja es wird ein Buffer auf dem Heap angelegt! > Aber dank RAII auch wieder abgebaut. > Also: Nullsumme, in Sachen Speicher. Es stimmt zwar in dem Sinne, dass nach der Aktion nicht mehr Speicher belegt ist als davor, aber darum ging es nicht. Es ging darum, dass während ihr zusätzlicher Speicher unnötig belegt wird. > Im Eingangsposting wird nach der Verknüpfung 2er Strings gefragt, vor > der Ausgabe. Dazu kamen viele Aussagen, die String völlig unnötig zu > C-strings konvertieren wollten, sogar mit memcpy() usw. Ja, die waren unsinnig, brauchen aber auch nicht mehr Platz als dein Beispiel oben mit dem Operator +. W.S. schrieb: > Strings gibt es in C nicht. Punkt. Es gibt in C keinen eigenen Datentyp für Strings. Strings an sich gibt es natürlich schon, denn sonst könnte man keinen Text ausgeben. > Stattdessen gibt es Felder von Bytes, wo man Bytes aka char's hineintun > kann und um das Ende davon zu kennzeichnen, fügt man anschließend ein > Nullbyte dran. Genau das ist in C ein String: Ein Array aus char, das mit einem Nullbyte endet. > Das, was du als String betrachtest, ist also eine Folge von Bytes, > gefolgt von einem Byte, was 0 ist. Nein, da es hier gar nicht um C geht und der TO mit "String" kein Array aus char, sondern die Arduino-Klasse String gemeint hat. > Versuche mal, auch das zu verstehen. Du deklarierst also eine Variable, > die folglich ins RAM kommt (wir sind hier ja bei den Mikrocontrollern) > und die soll die Zeichenfolge Hallo test enthalten. Wer bittesehr soll > das in den RAM stopfen? Vielleicht sagst du jetzt "der Startup-Code soll > mir das machen", Wer das macht, ist egal. Das abstrahiert die Sprache/die API, damit man sich selbst nicht drum kümmern muss. Worum man sich allerdings kümmern muss ist, dass man nicht zu viel Speicher braucht. > also schau in den Startupcode, ob der sich wirklich darum kümmert und > schau in die von deiner Toolchain erzeugte Datei, ob da wirklich die > Anweisungen dazu drinstehen. Ich hab ja schon bemerkt, dass du zu glauben scheinst, jeder C-Compiler enthielte einen Zufallsgenerator, der dafür sorgt, dass irgendwas passiert, statt dem, was man in den Code geschrieben hat. Aber langsam nimmt diese Paranoia doch bedenkliche Züge an.
Rolf M. schrieb: > Ich sehe von dir das hier: Dann hasst du wohl folgendes übersehen:
1 | cout << input << " space " << " was anderes" << endl; |
Rolf M. schrieb: > Genau das ist in C ein String Es ist kein String, sondern bloß etwas, das jemand derart genannt hat. Im Grunde sind das bloß aneinander gereihte Zeichen mit abschließendem Nullbyte - ohne jetzt auf den C typischen Mischmasch zwischen Zeichen und numerischen Dingen eingehen zu wollen. Und C++ hat das alles von C geerbt. Aber auf C++ bin ich nicht eingegangen und tu es auch jetzt nicht. Nur am Rande: in Pascal reicht es nicht aus, den Platz für ein Objekt zu reservieren, es muß auch mit seinem Konstruktor erstmal eingerichtet worden sein, bevor man mit ihm irgend etwas anstellen kann, z.B. irgend etwas ihm zuzuweisen. Für Strings würde es auch Funktionalität zum Behandeln und Verknüpfen geben, abe keine Methoden eines Objektes sondern so etwa wie: jetzt:= '18'+':'+'24'+' Uhr'; oder if name = 'Meier' then ... Aber bei C gibt es sowas eben nicht, sondern lediglich Funktionen str... zum Behandeln, die in C geschrieben sind bzw. sein können. Eben deshalb, weil es in C keinen Datentyp String gibt. Das, was gerade Anfänger immer wieder vor den Kopf stößt und sie damit verwirrt, ist der Umstand, daß vieles in C sehr salopp benannt wird und die betreffende Bezeichnung inhaltlich nicht sauber definiert ist. Allenfalls so etwa: "das ist hier eben SO!" Stefan F. schrieb: > W.S. schrieb: >> Hier gab's ja auch Leute, die nicht in Pascal, sonden in Delphi >> programmierten. > > Das sind immerhin zwei weit auseinander liegende Versionen mit > unterschiedlichen Features. OMG - noch so einer. Du scheinst mittlerweile öfter als üblich sämtliche Dinge zu verwechseln. Sprache und Entwicklungsumgebung wie man hier sieht. Damit du dir das mal merken kannst: Pascal = Sprache, Delphi = Entwicklungsumgebung. Das sind zwei ganz verschiedene Dinge, obwohl sie miteinander zu tun haben. Mal ganz grundsätzlich: Man kann durchaus mit so lala geeigneten Worten die Kommunikation untereinander flüssiger machen, vorausgesetzt, alle wissen Bescheid und wollen unter der Bezeichnung das Gleiche verstehen. Für den Disput mit einem Neuankömmling ist das hingegen unangebracht, da ist sprachliche und sachliche Präzision eher nötig. Sonst verselbständigt sich das Besprochene und es entstehen falsche Schlußfolgerungen daraus. Und daraus dann Hilferufe wie dieser Thread hier. W.S.
W.S. schrieb: > Aber auf C++ bin ich nicht eingegangen Das ist halt määh, weil Eva lange vor deinem Beitrag klar gestellt hat, dass sie Arduino C++ verwendet. Korrekte Sprache hilft nicht, wenn man damit vollkommen am Thema vorbei antwortet. Deine C Kenntnisse sind hier vollkommen irrelevant.
Stefan F. schrieb: > Das ist halt määh, weil Eva lange vor deinem Beitrag klar gestellt hat, > dass sie Arduino C++ verwendet. Das ist egal, weil das, was sie da schrieb, ganz offensichtlich in C genauso wie in C++ auf falschen Vorstellungen beruht. Schließlich ist das Verhältnis zwischen C und C++ wie oben scherzeshalber geschrieben so wie zwischen Goblin und Ork. Du hast dummes Zeug erzählt und willst dich jetzt irgendwie herauswinden. Ist geschenkt, ich bin dir deswegen nicht nachtragend. Allerdings sollte jeder (ja JEDER!), der mit C++ auf dem PC herumprogrammiert, sorgfältig nachsehen, was es da für Haken geben kann, wenn man das so einfach auf einen Mikrocontroller überträgt. Hier hat man kein OS, was einem die ganze Vorarbeit erledigt und keinen ubiquitären RAM. Bei Zeugs, was man als const hinschreibt wie z.B. const char meldung[] = "ottokar ist hier"; kann man davon ausgehen, daß sowas im Flash landet, während man bei Variablen, die im RAM vereinbart sind, sich immer fragen sollte, ob und von wem die gewünschte Vorbelegung erledigt werden soll oder ob man bei einem Objekt nach dem Reservieren des Platzes auch noch dessen Konstruktor aufrufen sollte und so. Es gibt also ein paar Unterschiede bei der Programmierung zwischen PC und µC. Und ein Compiler macht (meistens) das, was man ihm hingeschrieben hat und nicht das, was man damit gemeint hat. Ausnahme GCC bisweilen. W.S.
W.S. schrieb: > const char meldung[] = "ottokar ist hier"; > kann man davon ausgehen, daß sowas im Flash landet, Du irrst.
W.S. schrieb: > Rolf M. schrieb: >> Genau das ist in C ein String > > Es ist kein String, sondern bloß etwas, das jemand derart genannt hat. Natürlich ist es ein String. Ganz allgemein gesprochen ist ein String einfach eine Zeichenkette. Dass C dafür keinen eigenen Datentyp hat, sondern ein Array aus Zeichen nutzt, ändert daran nichts. > Aber auf C++ bin ich nicht eingegangen und tu es auch jetzt nicht. Das ist es aber, worum es hier geht. Es ist wenig sinnvoll, auf eine Frage zu einer Programmiersprache als Antwort zu erklären, warum das in einer anderen Programmiersprache nicht geht. Und der Unterschied ist an der Stelle durchaus signifikant. > Nur am Rande: in Pascal reicht es nicht aus, den Platz für ein > Objekt zu reservieren, es muß auch mit seinem Konstruktor erstmal > eingerichtet worden sein, bevor man mit ihm irgend etwas anstellen kann, > z.B. irgend etwas ihm zuzuweisen. In C++ werden Konstruktoren automatisch beim Erzeugen des Objekts aufgerufen. > Für Strings würde es auch Funktionalität zum Behandeln und Verknüpfen > geben, abe keine Methoden eines Objektes sondern so etwa wie: > jetzt:= '18'+':'+'24'+' Uhr'; Genau die gibt es für die Klasse, die im ursprünglichen Posting verwendet und benannt wurde. https://docs.arduino.cc/built-in-examples/strings/StringAdditionOperator In C gibt es die natürlich nicht, aber da das hier nicht zum Einsatz kommt, ist das vollkommen irrelevant.
W.S. schrieb: > Du hast dummes Zeug erzählt und willst dich jetzt > irgendwie herauswinden. Ich glaube du verwechselst mich mit jemand anderen. Ich war derjenige, der auf den RAM Bedarf hinwies. Ich war derjenige, der die Relevanz dessen verteidigte. Ich rede mich aus gar nichts heraus. Worauf beziehst du dich? Jetzt erzählst du mir, dass Mikrocontroller weniger RAM haben und ihn anders verwalten, als PC. Ach was! Genau das war doch der Grund meines Beitrages.
Stefan F. schrieb: > Ich war derjenige, der die Relevanz > dessen verteidigte. Bla bla... Stefan F. schrieb: > und genau das war doch der Grund meines Beitrages. Nein der Grund der meisten deiner Beiträge ist die Selbstprästation. Narzisstisches Verhalten. Hier wolltest du wieder einen Thread kapern und mit deinen Ansichten fluten. Ist dir fast gelungen.
Das hier ist ein Diskussionsforum für elektronische Fachthemen, nicht für Psychologie, Herr möchtegern Doktor EAF.
Stefan F. schrieb: > Das sind immerhin zwei weit auseinander liegende Versionen mit > unterschiedlichen Features. Ach Stefan Du beweist gerade mal wieder das Du so gar keine Anhnung hast, zuminsdest nicht von Pascal und Delphi. Es wurde hier schon x-mal im Forum erläutert, das Delphi keine Programmiersprache und auch kein Pascaldialekt ist. Delphi ist schlichtweg die Programmierumgebung, also die IDE. Die Programmiersprache die klassisch in Zusammenhang mit Delphi benutzt wird, ist halt Pascal oder besser Objektpascal, eine Erweiterung des klassischen Pascals von Wirth. Es ist auch nicht erforderlich, die Objectpascalprogramme mit Hilfe der Delphi-IDE zu kompilieren. Das funktioniert genauso gut scriptgesteuert und/oder unter Einbeziehung von make. Auch hinter der Delphi-IDE steckt am Ende nur die DCCxx.EXE der eigentliche Kompiler. Allerdings ist die Delphi IDE auch nicht nur auf (Object)Pascal beschränkt. Spätestens nach Delphi 7 ist das anders. Das nachfolgendende Delphi2005 konnte neben Pascal (mit und ohne .NET) auch C#. In der Folgeversion wurde aus Delphi dann das BORLAND Developer Studio. In der Version 2006 war dann auch noch die vollständige C++ Umgebung von Borland enthalten. Später dann bei XE kam dann auch noch PHP dazu. Es gibt auch immer noch Delphi zu kaufen, darunter wird aber immer noch die IDE verstanden und nicht die Programmiersprache. Mit Delphi & Pascal ist es eben genauso wie mit Arduino & C++. Letzteres ist genau genommen ein Konglomerat aus HW & SW. Auf der SW-Seite bedient man sich halt der Programmiersprache C++ und zum Erstellen der Programme benutzt man halt die Arduino-IDE, aber man schreibt am Ende C++ Programme, auch wenn das auf den ersten Blick nicht ersichtlich ist.
>> Das (Pascal und Delphi) sind immerhin zwei weit auseinander >> liegende Versionen mit unterschiedlichen Features. Zeno schrieb: > Ach Stefan Du beweist gerade mal wieder das Du so gar keine Anhnung > hast, zuminsdest nicht von Pascal und Delphi. Zwischen Pascal und Delphi liegen noch Turbo Pascal und Object Pascal. Weißt du, was wir gemeinsam haben? Eine katastrophale Rechtschreibung. Wir sind uns ähnlicher, als du denkst. Ich habe in Borlands Turbo Pascal 6 und 7 meine beiden ersten größeren Auftragsarbeiten programmiert. Eine Datenbank samt GUI für ein medizinisches Institut, sowie eine Partnervermittlung, die danach so gut lief, dass der Kunde sein bisheriges Hauptgeschäft (Immobilienmakler) aufgab. Danach bin ich auf C++ umgestiegen, habe die Entwicklung von Delphi aber noch am Rande mit bekommen, weil Kollegen damit arbeiteten. Du solltest nicht so voreilig über Leute urteilen, die du gar nicht kennst. Falls noch jemand nach treten möchte, bitte beeilen. Denn wenn das so weiter geht wird der Thread bald gesperrt.
Stefan F. schrieb: > Zwischen Pascal und Delphi liegen noch Turbo Pascal und Object Pascal. Wie kann man man nur so viel gequirlte Scheiße erzählen. Wenn Du Dich nicht wirklich auskennst, dann solltest Du einfach mal Griffel still halten. Ja es wissen alle hier das Du das nicht kannst und überall Deinen Senf dazugeben mußt. Turbo Pascal ist eben auch kein Pascaldialekt sondern ebenfalls eine Entwicklungsumgebung/Compiler, zu neudeutsch IDE. Turbopascal ist praktisch das DOS-Äquivalent zu Delphi. Beide Entwicklungsumgebungen können sowohl Pascal als auch Object Pascal kompilieren. Turbo Pascal kann dies seit Version 5.5 , da wurde nämlich die Objektorientierung bei Turbo Pascal eingeführt, ab Version 6 gab's dann Turbo Vision eine objektorientiert GUI-Bibliothek für DOS. Nach Turbo Pascal kam dann Borland Pascal und danach Delphi. Das mit jeder neuen Compilerversion auch neue Features in Pascal/Object Pascal Einzug gehalten haben ist eine andere Sache. Stefan F. schrieb: > Du solltest nicht so voreilig über Leute urteilen, die du gar nicht > kennst. Ich urteile nicht voreilig. Du hast etwas sachlich völlig falsch dargestellt und ich habe es korrigiert. Und was machst Du? An statt noch einmal über das nachzudenken was Du da schreibst, legst Du noch einmal nach und vermengst wieder Programmiersprache und Entwicklungsumgebung. Das sind 2 völlig unterschiedliche Dinge, auch dann noch wenn sie sich gegenseitig in gewissem Maße beeinflussen. Ich schreibe ja auch nicht, ich programmiere eine Anwendung in Visual Studio. Ich programmiere sie mit Visual Studio und benutze zum Programmieren z.B. C#. Stefan F. schrieb: > Falls noch jemand nach treten möchte, bitte beeilen. Denn wenn das so > weiter geht wird der Thread bald gesperrt. Das ist auch nicht getreten, ich habe lediglich gesagt das Deine Aussage bezüglich Pascal vs. Delphi falsch ist. Du hattest da auf einen Post von W.S. geantwortet und so wie Du geantwortet hast liest sich das für mich, das es da bei Dir keinen Unterschied zwischen Pascal und Delphi gibt.
W.S. schrieb: >> Hier gab's ja auch Leute, die nicht in Pascal, sonden in Delphi >> programmierten. Stefan F. schrieb: > Das sind immerhin zwei weit auseinander liegende Versionen mit > unterschiedlichen Features. Zeno schrieb: > so wie Du geantwortet hast liest sich das für mich, > das es da bei Dir keinen Unterschied zwischen Pascal und Delphi gibt. Kann es sein, dass du kein Deutsch verstehst? "zwei weit auseinander liegende Versionen mit unterschiedlichen Features" bedeutet keinesfalls, dass es da bei mir "keinen Unterschied zwischen Pascal und Delphi gibt". Zeno schrieb: > Wie kann man man nur so viel gequirlte Scheiße erzählen. Ja, wie kannst du nur?
Stefan F. schrieb: > Kann es sein, dass du kein Deutsch verstehst? Kann es sein das Du Dich nicht richtig in Deutsch ausdrücken kannst und man Dich deshalb nicht richtig versteht?
Zeno schrieb: > Wie kann man man nur so viel gequirlte Scheiße erzählen. Zeno schrieb: > solltest Du einfach mal Griffel still > halten. Ja es wissen alle hier das Du das nicht kannst und überall > Deinen Senf dazugeben mußt. Stefan F. schrieb: > Zeno, du hast Recht. endlich (ich glaube aber nicht wirklich an Einsicht)
fred schrieb: > was für ein cooler thread ... LOL ... schade ums forum :( Das ist hier schon immer so. Da muß man auch mal einstecken können - mußte ich auch schon. @Joachim: Mir geht es doch gar nicht um die Einsicht. Da wurde ein Sachverhalt nach meinem Verständnis nicht richtig dargestellt und ich wollte es lediglich gerade rücken - mehr nicht. Habe halt nicht berücksichtigt, daß das einer Majetätsbeleidigung gleich kommt - mein Fehler, damit werde ich jetzt wohl leben müssen.
Zeno schrieb: > Da wurde ein Sachverhalt > nach meinem Verständnis nicht richtig dargestellt und ich wollte es > lediglich gerade rücken - mehr nicht. Schwerlich möglich! Die IchPerson benötigt Aufmerksamkeit. Davon ernährt sie sich. Diese erhält sie über das kapern von Threads, auslösen von Streit usw. Die größte Freude scheint zu sein, wenn diese Threads daraufhin geschlossen werden. Darum wohl auch die Ankündigung. Das vermittelt wohl sowas wie AllMachtGefühle. Irgendwas gerade rücken zu wollen, ist der ideale Nährboden für Eskalationen mit der IchPerson. Mein Rat: Lass die IchPerson kommen... wenn sie nicht genug Aufmerksamkeit(Sparflamme) bekommt, vergisst sie Realität und Wahrheit. Dann kann man sie packen und der Lüge überführen. So erreicht man keine Heilung, hat aber den Rest des Threads seine Ruhe. Alles in allem, sind es Minderwertigkeitsgefühle und der Schrei nach Liebe, welcher die IchPerson zu solchem Tun verleitet. Irgendwas mit "früher Kindheit" Übrigens: Für IchPerson ist auch eine Tracht Prügel, sowas wie eine Zuwendung. IchPerson ist zudem, kaum bis gar nicht, in der Lage/willens die Situation von einee Ausßenperspektive zu betrachten. Denn es gibt kein relevantes Außen für die IchPerson. Nur das Ich und die Aufmerksamkeit die dem Ich gegeben wird.
Schön wäre wenn es hier eine Baumstruktur gäbe, dann würden die Nebendiskussionen es einem Zweig geführt und das Thema selber nicht stören. Irgendwie war damals jedes Forum sinnvollerweise so aufgebaut , wiesi jetzt nicht mehr?
Nur der TO sollte Beiträge bewerten können. Und schlecht bewertete Beiträge sollten ausgeblendet werden und erst auf Anforderung erscheinen. My 2ct. LG, Sebastian
Sebastian schrieb: > Nur der TO sollte Beiträge bewerten können. Und schlecht bewertete > Beiträge sollten ausgeblendet werden und erst auf Anforderung > erscheinen. My 2ct. Was passiert, wenn die Beiträge des TO selbst schlecht sind?
Peter K. schrieb: > Irgendwie war damals jedes Forum sinnvollerweise so aufgebaut Weil solche Diskussions-Systeme damals überwiegend von Computerspezialisten verwendet wurden (glaube ich). Durch die Vereinfachung werden sie für andere User attraktiver. Schau dir Apple Software an (oder Whatsapp), die haben mit der Methode Erfolg.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.