368 votes

convertir un char* en std::string

J'ai besoin d'utiliser un std::string pour stocker les données récupérées par fgets() . Pour ce faire, je dois convertir le char* valeur de retour de fgets() dans un std::string pour le stocker dans un tableau. Comment cela peut-il être fait ?

520voto

Jesse Beder Points 14026

std::string a un constructeur pour cela :

const char *s = "Hello, World!";
std::string str(s);

Notez que cette construction copie profondément la liste de caractères à s y s ne devrait pas être nullptr sinon le comportement est indéfini.

8 votes

Que se passera-t-il si c'est le cas ?

0 votes

@Jesse Sur quoi vous basez-vous pour dire qu'une telle exception est levée ?

1 votes

@Neil, mon implémentation (gcc) le fait. Je n'arrive pas à trouver une réponse officielle ici. Que doit-il se passer ?

175voto

Eugene Points 3671

Si vous connaissez déjà la taille du char*, utilisez plutôt ceci

char* data = ...;
int size = ...;
std::string myString(data, size);

Ceci n'utilise pas strlen.

EDIT : Si la variable string existe déjà, utilisez assign() :

std::string myString;
char* data = ...;
int size = ...;
myString.assign(data, size);

1 votes

C'est une question secondaire, Eugène. Si données n'est pas remplie avant la fin de la routine, comment initialiser myString à ce moment-là ? Déclarez-vous simplement la variable myString lorsqu'elle est remplie ?

3 votes

Int size = strlen(data) ;

0 votes

@vlad : l'idée est que vous connaissez la taille à partir d'une autre source et/ou que les données ne sont pas une chaîne de caractères C (avec des nuls intégrés ou ne se terminant pas par un nul). Si vous avez une chaîne C, vous pouvez simplement faire myString = data ; cela lancera strlen ou l'équivalent pour vous.

33voto

Paul Points 5080

J'ai besoin d'utiliser std::string pour stocker les données récupérées par fgets().

Pourquoi utiliser fgets() lorsque vous programmez en C++ ? Pourquoi pas std::getline() ?

21voto

James Thompson Points 15464

Passez-la dans le constructeur :

const char* dat = "my string!";
std::string my_string( dat );

Vous pouvez utiliser la fonction string.c_str() pour aller dans l'autre sens :

std::string my_string("testing!");
const char* dat = my_string.c_str();

5 votes

c_str() renvoie à const char*

1 votes

En effet, vous ne pouvez pas (ne devriez pas) modifier les données d'une std::string via c_str(). Si vous avez l'intention de modifier les données, alors la chaîne c de c_str() doit être memcpyée.

12voto

Yong Points 398
const char* charPointer = "Hello, World!\n";
std::string strFromChar;
strFromChar.append(charPointer);
std::cout<<strFromChar<<std::endl;

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