J'ai une application Visual Studio 2008 C++ 03 où je veux copier d'un std :: string à un tableau char, mais j'ai besoin le tableau char est à zéro, même s'il doit tronquer la chaîne pour le faire.copie à partir d'un std :: string à un tableau char et null-terminant le résultat
Ceci, par exemple fonctionne comme vous le souhaitez:
inline void CopyAndNullTerminate(const std::string& source,
char* dest,
size_t dest_size)
{
source.copy(dest, dest_size);
using std::min;
char* end = dest + min(dest_size - 1, source.size());
*end = '\0';
}
int main()
{
enum{ MAX_STRING_SIZE = 15 };
char dest[ MAX_STRING_SIZE ];
std::string test = "This is a test";
CopyAndNullTerminate(test, dest, MAX_STRING_SIZE);
assert(strcmp(test.c_str(), dest) == 0);
return 0;
}
exemple: http://ideone.com/0EBYb
Y at-il une plus courte, méthode plus efficace de le faire?
Merci
Cela a malheureusement l'effet secondaire de devoir construire une chaîne C validée nulle pour les implémentations de 'std :: string' qui ne l'utilisent pas comme représentation interne. –
@ K-ballo vrai, mais pour la plupart des implémentations, je suppose que ce serait l'implémentation utilisée ... –
Bien que cette méthode soit plus courte, elle peut être moins efficace. Vous devriez le signaler dans votre réponse. –