web-dev-qa-db-fra.com

Convertissez char * en chaîne C++

Je connais l'adresse de départ de la chaîne (par exemple, char* buf) et la longueur maximale int l; de la chaîne (le nombre total de caractères est inférieur ou égal à l).

Quel est le moyen le plus simple d'obtenir la valeur de la variable string à partir du segment de mémoire spécifié? En d'autres termes, comment implémenter string retrieveString(char* buf, int l);.

EDIT: La mémoire est réservée à l'écriture et à la lecture de chaînes de longueur variable. En d'autres termes, int l; indique la taille de la mémoire et non la longueur de la chaîne.

25
Terry Li
std::string str(buffer, buffer + length);

Ou, si la chaîne existe déjà:

str.assign(buffer, buffer + length);

Edit: Je ne suis toujours pas complètement sûr de comprendre la question. Mais si cela ressemble à ce que suggère JoshG, vous voulez utiliser jusqu'à length caractères, ou jusqu'à un terminateur nul, selon la première éventualité, vous pouvez utiliser ceci:

std::string str(buffer, std::find(buffer, buffer + length, '\0'));
18
Benjamin Lindley
char *charPtr = "test string";
cout << charPtr << endl;

string str = charPtr;
cout << str << endl;
7
Taha

Il semble qu'il reste quelques détails dans votre explication, mais je ferai de mon mieux ...

S'il s'agit de chaînes terminées par NUL ou si la mémoire est pré-remise à zéro, vous pouvez simplement parcourir la longueur du segment de mémoire jusqu'à ce que vous trouviez un caractère NUL (0) ou la longueur maximale (selon la première éventualité). Utilisez le constructeur de chaîne en passant le tampon et la taille déterminée à l'étape précédente.

string retrieveString( char* buf, int max ) {

    size_t len = 0;
    while( (len < max) && (buf[ len ] != '\0') ) {
        len++;
    }

    return string( buf, len );

}

Si ce qui précède n'est pas le cas, je ne sais pas comment vous déterminez où se termine une chaîne.

2
Amish Programmer

Utilisez le constructeur de la chaîne

basic_string(const charT* s,size_type n, const Allocator& a = Allocator());

MODIFIER:

OK, alors si la longueur de la chaîne C n’est pas donnée explicitement, utilisez le ctor:

basic_string(const charT* s, const Allocator& a = Allocator());
2
chill