begin process at 2012 05 28 23:15:09
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

Convertir string en char*


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Convertir string en char*

mercredi 3 mai 2006 à 15:44:11 | Convertir string en char*

turnerom

Bonjour,
je n'arrive pas à convertir une string en char*, je sais que ca parait tout bete, mais je bloque, si quelqu'un pouvait m'aider, ce serai super.

Voici mon code

void receive ( size_t sz, char* buf )
{
    size_t nb=0,i;
    string tmp, err;

    for( i=0; i < sz ; )
    {
        char* recpt=new char[65535];

        nb=recv(id_socket,&recpt[0],(int)((sz-i-1)%65535+1),0);

        if(nb==0)
            break;

        for(int j=0;j<nb;j++)
            tmp+=recpt[j];

        i+=nb;
        cout << "nb : " << nb << endl;

        delete(recpt);
    }

    string::const_iterator it=tmp.begin();
    int nbtmp=0;
    while(it!=tmp.end())
    {
        buf[nbtmp++]=*it++;
    }
    /* ou
    strncpy(&buf[0],tmp.c_str(),tmp.size()); marche pas non plus
    */

    cout << "Taille de la string : " << tmp.size() << " celle de la chaine : " << strlen(buf)-1  << endl;

}

Voila, dans ma string, j'ai toutes les infos qui m'interesse, mais la ou ca plante c'est pour le mettre dans un char*.

Et une trace à l'execution :
#> prog.exe
#> ...
#> Taille de la string : 113788 celle de la chaine : 3
#> ...


La je bloque vraiment, si quelqu'un sait d'ou ca peut venir.
Merci

TuRn3r
mercredi 3 mai 2006 à 15:55:03 | Re : Convertir string en char*

vecchio56

Administrateur CodeS-SourceS
Le problème c'est qu'il y a des caractères nuls (le quatrième au moins). Du coup, strlen de retourne 3. Tu n'a qu'a essayer tmp.length(), tu aura aussi 3 normalement
mercredi 3 mai 2006 à 16:05:53 | Re : Convertir string en char*

turnerom

Merci, mais non, ca me rend bien 113788, de toute facon tmp.length() et tmp.size() c'est la meme chose.
Par contre qu'il y ai un caractere nul, c'est fort probable.
Mais, comment je fait pour connaitre la taille de ma chaine buf alors ???



TuRn3r
mercredi 3 mai 2006 à 16:08:52 | Re : Convertir string en char*

vecchio56

Administrateur CodeS-SourceS
Réponse acceptée !
C'est a toi de la retenir quelque part, avec les différentes valeur nb que tu reçois
mercredi 3 mai 2006 à 16:08:58 | Re : Convertir string en char*

turnerom

Par contre et c'est peut-etre ca que tu voulai dire, mais un strlen(buf.c_str()) me rend bien 4 (pas 3 à cause du -1 que je faisait 'strlen(buf)-1').

En fait, je pense que ca copie bien tout comme il faut, mais du coup, comment je fait pour connaitre la taille de ma chaine buf ?

Merci

TuRn3r
mercredi 3 mai 2006 à 16:10:19 | Re : Convertir string en char*

turnerom

A la place de strlen(buf.c_str()) il faut lire strlen(tmp.c_str()) bien sur.
Y'a pas moyen de retrouver la taille de ma chaine ?

TuRn3r
jeudi 4 mai 2006 à 09:54:34 | Re : Convertir string en char*

turnerom

Réponse acceptée !
J'ai résolu mon problème, en fait, je passe par des pointeurs


void receive ( size_t sz, char* buf, size_t* buf_sz )
{
    size_t nb=0,i;
    string tmp, err;

    char* fg=new char[SIZE_MAX];

    for( i=0; i < sz ; )
    {
        char* recpt=new char[65535];

        nb=recv(id_socket,&recpt[0],(int)((sz-i-1)%65535+1),0);

        if(nb==0)
            break;
       
        for(int j=0;j<nb;j++)
            tmp+=recpt[j];

        i+=nb;

        delete(recpt);
    }

    if(tmp.size() >= SIZE_MAX)
    {
        err+="Chaine recu trop longue, augmenter TAILLE_MAX";
        throw(err);
    }

    *buf_sz=tmp.size();

    string::const_iterator it=tmp.begin();
    int nbtmp=0;
    while(it!=tmp.end())
    {
        buf[nbtmp++]=*it++;
    }

}



TuRn3r


Cette discussion est classée dans : string, char, nb, tmp, recpt


Répondre à ce message

Sujets en rapport avec ce message

problème d'allocation mémoire dans ma classe [ par Bub325 ] Salut, j'ai un problème dans le code suivant au niveau de l'allocation mémoire de tmp.a = new char... dans operator+, et je ne sait pas du tout pourqu Convertion d'une string en char [ par redpooka ] Voici avec ce programme ca n'affiche juste le premier charactère comment faire pour qu'il affiche toute la chaine de caracètre ?Merci#include <iostre Probleme converssion [ par zzzzzz ] <img src=/imgs2 Probleme malloc [ par zzzzzz ] <img src=/imgs2 AnsiString et Char [ par JCLK ] J'ai un leger probleme :je recupere une String et j'ai ensuite besoin de la transformer en char *Est-ce possible ?La String contient un path ("C:\...\ tableau de char -> string [ par alfred289 ] bonjour,j'utilise BOrland C++ builder 5 et j'essaie de transformer un tableau de caractères en sring et je trouve pas commentmerci de votre aide operator [] ds une classe string pr retourner un caractère [ par ngryman ] Salut à ts,voilà j'ai un petit souci ds une classe String que j'ai fait. J'ai inclu un opérateur [] qui comme un char* retourne le char à la position Convertir une string en char* [ par dickymoe ] Existe-t-il une fonction qui permet de convertir une string en char* ?ou alors une fonction qui compare deux string sans respecté la casse ???Merci(en Problème d'effacement de tableau en C++ (sans MFC) [ par Shad0w ] Voilà, mon code copie le contenu d'un fichier dans une edit :------------- char fil[LEN]; OPENFILENAME ofn; ZeroMemory(&ofn, sizeof(OPENFI convertir un String* en char [ par mimyne ] Bonjour a tous malgrès toute les fonctions que g essayé je n'arrive pas a convertir un string* en char s'il y a qqun qui pourrait me renseigner je su


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,374 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales