0 votes

string vers const char*

Cette ligne :

strcat(query,*it);

(où *it est un itérateur vers une chaîne de caractères)

Ça ne cesse de me donner cette erreur :

pas de fonction correspondante pour l'appel à \N `strcat(char[200], const std::basic_string<char, std::char_traits<char>, std::allocator<char> >&) '

Je suppose que c'est parce que strcat accueille un char* tandis que *it est une chaîne de caractères. Comment puis-je le convertir d'une chaîne de caractères en un mot de passe ? char* pour le faire fonctionner avec strcat() ?

J'ai essayé strcat(query,(*it).c_str()) mais cela me donne juste une erreur d'exécution.

Edit : sorry, it should be converted to a const char*

7voto

tragomaskhalos Points 1085

strcat(query,(*it).c_str()) devrait fonctionner. Quelle est l'erreur d'exécution ? Etes-vous sûr que query est terminé par un zéro avant de faire l'appel ?

2voto

Loki Astari Points 116129

Débordement de tampon ?

char   query[200] = {0}; // Make sure this array initialized before
                         // you start concatenating strings onto it.

for (it = vec.begin();it != vec.end();++it)
{
   if ((strlen(query) + it->length() + 1) >= 200)
   {
       logError("Buffer oveflow detected.";
       break;
   }
   strcat(query, it->c_str());
}

2voto

korona Points 1231

Utilise le débogueur, Luke !

(*it).c_str() C'est sûr que ce devrait être un argument valide pour strcat, en supposant que votre itérateur est valide, et en supposant que la requête est une chaîne de caractères à terminaison nulle, donc cela devrait être le cas. La façon la plus rapide de trouver lequel d'entre eux se comporte mal est de le regarder faire et d'inspecter les valeurs de it et query au moment de l'exécution.

1voto

unwind Points 181987

Vous devez être plus précis quant à l'erreur d'exécution que vous obtenez. Appel à c_str() sur la corde devrait être la solution correcte. Comme toujours avec strcat() et d'autres fonctions classiques de chaîne de caractères en C sans vérification des limites, vous devez faire attention à ne pas lui transmettre une entrée trop longue.

1voto

xtofl Points 22333

Lorsque vous êtes sûr de la longueur de la mémoire tampon que vous strcat (par exemple, 200), une meilleure utilisation de la strncat Cela permet d'exclure le dépassement de tampon mentionné par @Martin. Sinon, vérifiez la longueur totale avant de concaténer ( il s'agit d'une condition préalable à son utilisation !)

D'ailleurs, les requêtes dépassent généralement de loin les 200 caractères. Si vous n'êtes pas sûr de la longueur de la requête qui en résulte, utilisez une chaîne dynamique, par exemple std::string .

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