conversion string -> char *

conversion string -> char * - C++ - Programmation

Marsh Posté le 02-04-2004 à 10:23:53    

Je suis pourtant quasi sûr de l'avoir déjà vu dans un topic, mais je n'arrive pas à le retrouver ... :pfff:  
Donc voilà c'est un prog en c++ qui utilise des string, mais il fait appel à une dll en c qui attend un char * en argument, y a moyen de faire simple ? ou bien faut-il passer par un Format d'abord puis recopie dans un buffer de char ?

Reply

Marsh Posté le 02-04-2004 à 10:23:53   

Reply

Marsh Posté le 02-04-2004 à 10:37:17    

cricri_ a écrit :

Je suis pourtant quasi sûr de l'avoir déjà vu dans un topic, mais je n'arrive pas à le retrouver ... :pfff:  
Donc voilà c'est un prog en c++ qui utilise des string, mais il fait appel à une dll en c qui attend un char * en argument, y a moyen de faire simple ? ou bien faut-il passer par un Format d'abord puis recopie dans un buffer de char ?


std::string.c_str()?


Message édité par skeye le 02-04-2004 à 10:37:56
Reply

Marsh Posté le 02-04-2004 à 10:58:11    

pour un const char * ça ira

Reply

Marsh Posté le 02-04-2004 à 11:07:24    

Ok, merci à vous 2

Reply

Marsh Posté le 02-04-2004 à 11:57:03    

Flûte ... c'est un char *, j'ai fait un cast de sauvage ...  :heink:  
Je suppose qu'il n'y a pas moyen de faire mieux ?

Reply

Marsh Posté le 02-04-2004 à 12:07:49    

le cast sauvage va pas marcher, parce que tu ne peux pas modifier ce que te file la std::string.
 
pour bien faire
 

Code :
  1. std::vector<char> buffer(s.begin(), s.end());
  2. fonction_c(&buffer[0]);


 
avec bien buffer.size() == s.size() >= strlen(s.c_str())

Reply

Marsh Posté le 02-04-2004 à 12:20:07    

Code :
  1. // ça me semble un bon exemple
  2. #include <vector>
  3. #include <string>
  4. #include <iostream>
  5. inline void Taz(char *c)
  6. {
  7.   if(strlen(c) >= (sizeof "TazForEver" - 1))
  8.     {
  9.       std::memcpy(c, "TazForEver", sizeof "TazForEver" - 1);
  10.     }
  11. }
  12. int main()
  13. {
  14.   std::string line;
  15.   while(std::getline(std::cin, line))
  16.     {
  17.      
  18.       std::vector<char> buffer(line.begin(), line.end());
  19.       if(buffer.back() != '\0')
  20. {
  21.   buffer.push_back('\0');
  22. }
  23.       Taz(&buffer[0]);
  24.       line.assign(buffer.begin(), buffer.end());
  25.       std::cout << line << '\n';
  26.     }
  27. }


Message édité par Taz le 02-04-2004 à 12:21:53
Reply

Marsh Posté le 02-04-2004 à 13:31:23    

Merci !

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed