Convertir string en char* [Résolu]

Messages postés
492
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
12 janvier 2012
- - Dernière réponse : turnerom
Messages postés
492
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
12 janvier 2012
- 4 mai 2006 à 09:54
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
Afficher la suite 

6 réponses

Meilleure réponse
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
3
Merci
C'est a toi de la retenir quelque part, avec les différentes valeur nb que tu reçois

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 190 internautes nous ont dit merci ce mois-ci

Commenter la réponse de vecchio56
Messages postés
492
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
12 janvier 2012
1
3
Merci
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

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 190 internautes nous ont dit merci ce mois-ci

Commenter la réponse de turnerom
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
0
Merci
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
Commenter la réponse de vecchio56
Messages postés
492
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
12 janvier 2012
1
0
Merci
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
Commenter la réponse de turnerom
Messages postés
492
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
12 janvier 2012
1
0
Merci
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
Commenter la réponse de turnerom
Messages postés
492
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
12 janvier 2012
1
0
Merci
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
Commenter la réponse de turnerom