Ist es besser, c_str oder toCharArray zu verwenden?


7

Beim Lesen / Ausprobieren einer aktuellen Antwort war ich überrascht zu sehen, dass die StringKlasse von Arduino die c_str()Methode unterstützt , genau wie die C ++ - std::stringKlasse. Wie erwartet scheint es einen Zeiger auf den Inhalt der Zeichenfolge als nullterminiertes charArray (dh Zeichenfolge im C-Stil) zu erhalten.

Soweit ich sehen kann, wird diese Methode jedoch in der offiziellen Arduino-Dokumentation nicht erwähnt. Außerdem Stringscheint in allen Beispielcodes, die ich verwendet habe , ein anderer Ansatz verwendet zu werden. Ein sekundärer charPuffer wird eingerichtet, und dann wird der Inhalt der Zeichenfolge mit kopiert String::toCharArray(). Dies erfordert offensichtlich den doppelten Speicher sowie eine O (n) -Kopieroperation.

Es scheint, c_str()sollte der bevorzugte Ansatz sein. Gibt es einen Grund, warum toCharArray()es häufiger verwendet wird?


Weil neue Arduino-Benutzer nicht verzweigen wollen
TheDoctor

Antworten:


3

Es scheint, c_str()sollte der bevorzugte Ansatz sein. Gibt es einen Grund, warum toCharArray()es häufiger verwendet wird?

Im Grunde würde ich sagen, es ist ein Mangel an Wissen von den Leuten, die die Codes machen, die Sie gesehen haben. Ist definitiv c_str()besser. Was ich jedoch noch häufiger sehe, ist die Verwendung von char*Zeichenfolgen anstelle von Zeichenfolgen String(und ich bekenne mich auch in meinen eigenen Codes schuldig).

Und das liegt daran, dass die Arduino-Bibliothek auf einem chaotischen Satz von C- und C ++ - Bibliotheken und Codierungsstilen basiert. Der Versuch, die Dinge einfacher zu machen, hat sie tatsächlich durcheinander gebracht und komplizierter gemacht.

Aus diesem Grund haben wir neue Projekte wie xpcc, die versuchen, die C ++ - Fähigkeiten in der eingebetteten Welt real und intelligent zu nutzen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.