Selon les déclarations faites dans les réponses de ces questionsest-il un moyen de définir la longueur d'une chaîne std :: sans modifier le contenu de la mémoire tampon?
- Is writing to &str[0] buffer (of a std:string) well-defined behaviour in C++11?
- Is it legal to write to std::string?
- writing directly to std::string internal buffers
.. en C++ 11, il devrait être possible d'appeler une API C fonction qui prend un pointeur char pour stocker la sortie comme ceci:
str::string str;
str.reserve(SOME_MAX_VALUE);
some_C_API_func(&str[0]);
Mais existe-t-il maintenant un moyen légal pour de définir la taille de la chaîne à la longueur du contenu (terminé par un caractère nul) dans le tampon? Quelque chose comme ceci:
str.set_size(strlen(&str[0]));
Ceci est très inesthétique abus de std::string
de toute façon je vous entends dire, mais je ne peux pas créer un tampon char
temporaire sur pile, donc je dois créer un tampon en tas et détruire après (que je veux éviter).
Existe-t-il une bonne façon de faire cela? Peut-être pas réserver mais le redimensionnement et d'appeler erase()
serait ensuite le faire, mais il ne se sent pas bien plus propre ..
Avez-vous essayé 'redimensionner '? –
oui, mais 'resize()' semble modifier le contenu. Au moins quand je réserve() 'le tampon et' resize() 'après cela la chaîne est vide après. Il semble fonctionner avec 'resize (SOME_MAX_VALUE)'. Si quelqu'un me convainc que c'est l'approche la plus sophistiquée, je suis heureux :) – frans
@frans, pourquoi n'utilisez-vous pas std :: array pour définir la taille de la chaîne ?? – MCHAppy