Question:
Est-il préférable d'utiliser c_str ou toCharArray?
Peter Bloomfield
2014-02-28 23:03:45 UTC
view on stackexchange narkive permalink

En lisant / essayant une réponse récente, j'ai été surpris de voir que la classe String d'Arduino prend en charge la méthode c_str () , tout comme la classe C ++ std :: string . Comme prévu, il semble obtenir un pointeur vers le contenu de la chaîne sous la forme d'un tableau char terminé par un zéro (c'est-à-dire une chaîne de style C).

Cependant, (dans la mesure où je peux voir) cette méthode n'est pas mentionnée dans la documentation officielle Arduino. De plus, dans tous les exemples de code que j'ai vus en utilisant String , une approche différente semble être utilisée. Un tampon secondaire char est configuré, puis le contenu de la chaîne y est copié en utilisant String :: toCharArray () . Cela nécessite évidemment le double de la mémoire, plus une opération de copie O (n).

Il semble que c_str () devrait être l'approche préférée. Y a-t-il une raison pour laquelle toCharArray () est plus couramment utilisé?

Parce que les nouveaux utilisateurs Arduino ne veulent pas se diversifier
Un répondre:
zmo
2014-03-01 19:55:11 UTC
view on stackexchange narkive permalink

Il semble que c_str () devrait être l'approche préférée. Y a-t-il une raison pour laquelle toCharArray () est plus couramment utilisé?

En gros, je dirais que c'est un manque de connaissances de la part des personnes qui font les codes que vous ' J'ai vu. Certainement c_str () est mieux. Cependant, ce que je vois encore plus souvent, c'est l'utilisation de chaînes de caractères char * au lieu de String (et je plaide également coupable de cela dans mes propres codes).

Et c'est parce que la bibliothèque Arduino a été construite sur un ensemble désordonné de bibliothèques C et C ++ et de style de codage. Essayer de rendre les choses plus faciles les a gâchées et les a compliquées davantage.

C'est en fait pourquoi nous avons de nouveaux projets comme xpcc essayant de faire une utilisation réelle et intelligente des capacités du C ++ dans le monde embarqué.



Ce Q&R a été automatiquement traduit de la langue anglaise.Le contenu original est disponible sur stackexchange, que nous remercions pour la licence cc by-sa 3.0 sous laquelle il est distribué.
Loading...