Avatar billede oddi Nybegynder
06. august 2008 - 00:31 Der er 4 kommentarer og
1 løsning

string til char *

Hej eksperter

jeg har et problem med std::string til char *

jeg har en funktion:

const int read(std::string& str)
{
    const char *buf = str.c_str();
    int numbytes;

    if ((numbytes=recv(new_fd, buf, MAXDATASIZE-1, 0)) == -1)
    {
        return -1;
    }
    str = buf;
   
    return numbytes;
}

Problemet er at recv andet argument skal ha´ en void *ptr og str.c_str(); retunerer en const char *.

Hvordan kan jeg ændre min const char *buf til char *buf ? så jeg kan bruge min *buf i recv funktionen.
Avatar billede arne_v Ekspert
06. august 2008 - 00:44 #1
Læs ind i et char array og smid indholdet af det over i en string.

string har en = operator der kan gøre det.
Avatar billede arne_v Ekspert
06. august 2008 - 00:46 #2
const int read(std::string& str)
{
    char buf[MAXDATASIZE];
    int numbytes;
    if ((numbytes=recv(new_fd, buf, MAXDATASIZE-1, 0)) == -1)
    {
        return -1;
    }
    buf[numbytes] = '\0';
    str = buf;
    return numbytes;
}
Avatar billede oddi Nybegynder
06. august 2008 - 01:18 #3
Ahh selfølgelig! Jeg må være træt...

Smid et svar arne_v
Avatar billede arne_v Ekspert
06. august 2008 - 04:55 #4
svar
Avatar billede segmose Nybegynder
06. august 2008 - 13:46 #5
const char *buf = str.c_str();

Er en konstruktion du aldrig må bruge, c_str() må kun bruges når den direkte bliver brugt som argument da det char array du får retur kan være temporært idet string ikke behøver at lagre kontinuert og slet ikke at have et allokeret område. Hvilket betyder at buf i det tilfælde kunne være NULL eller pege på et uallokeret/genbrugt lager område.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester