Beim Lesen / Ausprobieren einer aktuellen Antwort war ich überrascht zu sehen, dass die String
Klasse von Arduino die c_str()
Methode unterstützt , genau wie die C ++ - std::string
Klasse. Wie erwartet scheint es einen Zeiger auf den Inhalt der Zeichenfolge als nullterminiertes char
Array (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 String
scheint in allen Beispielcodes, die ich verwendet habe , ein anderer Ansatz verwendet zu werden. Ein sekundärer char
Puffer 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?
quelle
Antworten:
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 vonchar*
Zeichenfolgen anstelle von ZeichenfolgenString
(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.
quelle