Maison > développement back-end > C++ > Comment convertir en toute sécurité entre stringstream, string et char* en C ?

Comment convertir en toute sécurité entre stringstream, string et char* en C ?

Susan Sarandon
Libérer: 2024-11-14 17:31:02
original
284 Les gens l'ont consulté

How to Safely Convert Between stringstream, string, and char* in C  ?

Navigation des conversions stringstream, string et char*

Lorsqu'ils travaillent avec des chaînes en C, les programmeurs rencontrent souvent une confusion lors de la conversion entre stringstream, string , et char*. Cet article explore les subtilités de ces conversions, démêle les idées fausses et propose des solutions pratiques.

Comprendre la durée de vie de stringstream.str().c_str()

Le point crucial Le problème réside dans la compréhension de la durée de vie de la chaîne renvoyée par stringstream.str().c_str(). Cet objet chaîne temporaire est détruit à la fin de l'expression, rendant invalides tous les pointeurs obtenus (comme const char* cstr2).

Résoudre la confusion

Pour résolvez ce problème, évitez d'attribuer stringstream.str().c_str() directement à un const char*. Au lieu de cela, créez une copie de la chaîne temporaire dans un autre objet chaîne, puis obtenez la chaîne C à partir de celui-ci :

const std::string tmp = stringstream.str();
const char* cstr = tmp.c_str();
Copier après la connexion

Vous pouvez également limiter la durée de vie de la chaîne temporaire en l'utilisant dans l'expression :

use_c_str( stringstream.str().c_str() );
Copier après la connexion

Pour plus d'efficacité et de clarté, liez le temporaire à une référence const :

{
  const std::string& tmp = stringstream.str();   
  const char* cstr = tmp.c_str();
}
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal