Je voudrais convertir string
en char
tableau mais pas char*
. Je sais comment convertir une chaîne en char*
(en utilisant malloc
ou de la manière dont je l'ai publiée dans mon code) - mais ce n'est pas ce que je veux. Je veux simplement convertir string
en char[size]
tableau. C'est possible?
#include <iostream>
#include <string>
#include <stdio.h>
using namespace std;
int main()
{
// char to string
char tab[4];
tab[0] = 'c';
tab[1] = 'a';
tab[2] = 't';
tab[3] = '\0';
string tmp(tab);
cout << tmp << "\n";
// string to char* - but thats not what I want
char *c = const_cast<char*>(tmp.c_str());
cout << c << "\n";
//string to char
char tab2[1024];
// ?
return 0;
}
c++
string
type-conversion
Brian Brown
la source
la source
Réponses:
La façon la plus simple de le faire est:
Pour votre sécurité, vous préférerez peut-être:
ou pourrait être de cette façon:
la source
strncpy
est qu'il ne se terminera pas par null s'il atteint la taille avant de trouver un null dans la chaîne source. Je dois faire attention à ça aussi!Ok, je suis choqué que personne n'ait vraiment donné une bonne réponse, maintenant à mon tour. Il y a deux cas;
Un tableau de caractères constant est assez bon pour vous donc vous allez avec,
Ou vous devez modifier le tableau de caractères pour que la constante ne soit pas correcte, alors allez-y simplement
Les deux ne sont que des opérations d'affectation et la plupart du temps c'est exactement ce dont vous avez besoin, si vous avez vraiment besoin d'une nouvelle copie, suivez les réponses des autres boursiers.
la source
std::size(elem)
en C ++ est bien défini quandelem
est achar array
mais il ne parvient pas à compiler quandelem
est achar*
ouconst char*
, vous pouvez le voir iciLa façon la plus simple de le faire serait la suivante
la source
Il est préférable d'éviter C en C ++, donc std :: string :: copy devrait être le choix au lieu de strcpy .
la source
Copiez simplement la chaîne dans le tableau avec
strcpy
.la source
Essayez de cette façon, cela devrait fonctionner.
la source
Essayez strcpy (), mais comme Fred l'a dit, c'est C ++, pas C
la source
Vous pouvez utiliser
strcpy()
, comme ceci:Attention au débordement de la mémoire tampon.
la source
Si vous ne connaissez pas au préalable la taille de la chaîne, vous pouvez allouer dynamiquement un tableau:
la source
Eh bien , je sais que cela peut - être plutôt stupide
queet simple, mais je pense que cela devrait fonctionner:la source
n
ne peut pas être plus grand queb
. Il planterait sin>b
. Mieux vaut utiliser lastrcpy
fonction déjà fournie. Edit: Dans certains cas, il peut être encore mieux d'utiliserstrcpy_s
car il ajoute la vérification des pointeurs NULL (si votre plate-forme le prend en charge)Si vous utilisez C ++ 11 ou supérieur, je suggérerais d'utiliser
std::snprintf
overstd::strcpy
ou enstd::strncpy
raison de sa sécurité (c'est-à-dire, vous déterminez combien de caractères peuvent être écrits dans votre tampon) et parce qu'il termine la chaîne par null (donc vous n'avez pas à vous en soucier). Ce serait comme ça:En C ++ 17, vous avez cette alternative:
la source