Vraag:
Is het beter om c_str of toCharArray te gebruiken?
Peter Bloomfield
2014-02-28 23:03:45 UTC
view on stackexchange narkive permalink

Bij het lezen / proberen van een recent antwoord, was ik verrast om te zien dat de String -klasse van Arduino de c_str () -methode ondersteunt, net als de klasse C ++ std :: string . Zoals verwacht, lijkt het een pointer naar de inhoud van de string te krijgen als een char -array met null-beëindigd (dwz string in C-stijl).

Echter, (voor zover ik kan zie) die methode wordt niet genoemd in de officiële Arduino-documentatie. Bovendien lijkt in alle voorbeeldcode die ik heb gezien met String een andere benadering te worden gebruikt. Er wordt een secundaire char -buffer ingesteld en vervolgens wordt de inhoud van de tekenreeks ernaar gekopieerd met String :: toCharArray () . Dit vereist uiteraard het dubbele geheugen, plus een O (n) kopieerbewerking.

Het lijkt erop dat c_str () de voorkeur zou moeten hebben. Is er een reden waarom toCharArray () vaker wordt gebruikt?

Omdat nieuwe Arduino-gebruikers niet willen vertakken
Een antwoord:
zmo
2014-03-01 19:55:11 UTC
view on stackexchange narkive permalink

Het lijkt erop dat c_str () de voorkeur zou moeten hebben. Is er een reden waarom toCharArray () vaker wordt gebruikt?

eigenlijk zou ik zeggen dat het een gebrek aan kennis is van de mensen die de codes die jij uitvoert ' heb gezien. Zeker c_str () is beter. Wat ik echter nog vaker zie, is het gebruik van character arrays char * strings in plaats van String (en daar pleit ik ook schuld aan in mijn eigen codes). / p>

En dat komt omdat de Arduino-bibliotheek is gebouwd op een rommelige set C- en C ++ -bibliotheken en coderingsstijlen. Door dingen gemakkelijker te maken, werden ze feitelijk verknoeid en ingewikkelder gemaakt.

Dat is eigenlijk waarom we nieuwe projecten hebben zoals xpcc die proberen een echt en slim gebruik te maken van de C ++ -capaciteiten in de ingebedde wereld.



Deze Q&A is automatisch vertaald vanuit de Engelse taal.De originele inhoud is beschikbaar op stackexchange, waarvoor we bedanken voor de cc by-sa 3.0-licentie waaronder het wordt gedistribueerd.
Loading...