Conversion de std string a const char *

Résolu
DarkBul -  
mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour,
J'ai écrit ce code mais j'ai une erreur lors de la compilation concernant la ligne system(cmd); car la variables cmd est de type std string et que la commande systeme souhaite une variables de type const char *.
Comment faire pour passé de l'un à l'autre?

void main (void) {

/****** Variables locales ******/
string range, IP, cmd ;

/****** Blocs d'instructions ******/
cout << "Range (xxx.xxx.xxx.) : ";
cin >> range;

for (int i = 1; i <= 255; i++){

// Convert Integer to String (use sstream library)
std::stringstream ConvertStream;
ConvertStream << i;
ConvertStream >> IP;

cmd = ("ping " + range + IP);

system(cmd);

}
}


ERREUR : error C2664: 'system' : cannot convert parameter 1 from 'std::string' to 'const char *'
Configuration: Windows XP
Firefox 2.0.0.8

12 réponses

  1. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 944
     
    Non il faut utiliser c_str() car data() n'est pas forcément fini d'un '\0' :
    https://community.hpe.com/t5/custom/page/page-id/HPPSocialUserSignonPage?redirectreason=permissiondenied&referer=https%3A%2F%2Fcommunity.hpe.com%2Ft5%2FServers-Systems-The-Right%2FSGI-com-Tech-Archive-Resources-now-retired%2Fba-p%2F6992583

    Ainsi :
    #include <string>
    #include <iostream>
    
    int main(){
      const std::string test = "plop";
      std::cout << plop.c_str() << std::endl;
      return 0;
    }

    Bonne chance
    2
    1. Rob
       
      Hi, thanks for this, it solved my problem.

      (I read french fine, but I won't embarrass myself trying to write it)

      Merci!
      0
  2. spinakur
     
    oups boulette :

    std::string test = "salut";
    const char* resalut = test.data();
    std::cout << resalut << std::endl;


    dsl
    1
  3. spidag
     
    Bonjour,
    system ("%s",cmd);
    t'as essayé ?
    0
  4. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  5. DarkBul
     
    Bonjour,

    spidag ton code retourne: error C2660: 'system' : function does not take 2 arguments

    corbeau ton code retourne: error C2039: 'cs_str' : is not a member of 'std::basic_string<_Elem,_Traits,_Ax>'
    0
  6. CORBEAU
     
    pardon
    system (cmd.c_str());
    Bonne chance.
    0
  7. DarkBul
     
    Bonjour,

    Spidag : error C2664: 'system' : cannot convert parameter 1 from 'std::basic_string<_Elem,_Traits,_Ax>' to 'const char *'

    Merci Corbeau c'est nikel.
    0
  8. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 944
     
    Fais un truc dans ce genre :
    #include <sstream>
    #include <iostream>
    
    int main(){
        int x = 5;
        const char *str = "plop";
        double y = 69.28;
        std::ostringstream oss;
        oss << x << ' ' << str << '\t' << y;
        const char *res = oss.str().c_str();
        std::cout << res << std::endl;
        return 0;
    }
    

    std::ostringstream -- str() --> std::string -- c_str() --> const char *

    Bonne chance
    0
  9. spinakur
     
    salut un peut tard
    peut etre
    mais tu devrais essayer ca :
    std::string test = "salut";
    const char* resalut = test.data();
    std::cout << test << std::endl;
    


    la theoriquement ca devrais marcher
    il se peut que j'ecrive dans le vide mais la reponse servira a ceux qui cherche encore
    a+
    0
  10. adri
     
    avec .c_str()

    string hahaha;
    const char * hohoho;

    hohoho = hahaha.c_str();

    voir msdn.com
    0
  11. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 944
     
    Adri le sujet a presque un an et a déjà été résolu...
    0