43 votes

Copie d'un tableau de caractères non terminés par des zéros vers std::string

Si le tableau était Terminaison nulle ce serait assez simple :

unsigned char u_array[4] = { 'a', 's', 'd', '\0' };
std::string str = reinterpret_cast<char*>(u_array);
std::cout << "-> " << str << std::endl;

Cependant, je me demande quelle est la manière la plus appropriée de copier une non terminées par un zéro tableau de caractères non signés, comme le suivant :

unsigned char u_array[4] = { 'a', 's', 'd', 'f' };

en un std::string .

Existe-t-il un moyen de le faire sans itérer sur le fichier tableau de caractères non signés ?

Merci à tous.

2voto

Benoit Thiery Points 3720

Vous pouvez utiliser ce std::string constructeur :

string ( const char * s, size_t n );

donc dans votre exemple :

std::string str(u_array, 4);

1voto

Raedwald Points 8862

Vous pouvez créer un pointeur de caractère pointant sur le premier caractère, et un autre pointant sur le dernier caractère, et construire en utilisant ces deux pointeurs comme itérateurs. Ainsi :

std::string str(&u_array[0], &u_array[0] + 4);

1voto

plgDavid Points 11

Il y a toujours un problème lorsque la chaîne lui-même contient un caractère nul et vous essayez ensuite d'imprimer la chaîne :

char c_array[4] = { 'a', 's', 'd', 0 };

std::string toto(array,4);
cout << toto << endl;  //outputs a 3 chars and a NULL char

Cependant....

cout << toto.c_str() << endl; //will only print 3 chars.

C'est dans ces moments-là qu'on a envie de laisser tomber la beauté et de se contenter d'un simple C.

0voto

tibur Points 7082

Essayez :

std::string str;
str.resize(4);
std::copy(u_array, u_array+4, str.begin());

0voto

johannes Points 8057

Std::string a un constructeur qui prend un tableau de chars et une longueur.

unsigned char u_array[4] = { 'a', 's', 'd', 'f' };
std::string str(reinterpret_cast<char*>(u_array), sizeo(u_array));

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X