[C/C++] string -> char array

Pagina: 1
Acties:

  • Zynth
  • Registratie: September 2001
  • Laatst online: 29-07 15:30
Ik heb een C programmaatje, maar ik krijg de volgende compile-fout:
code:
1
2
simple_server_main.cpp:52: cannot convert `data' from type `string' to type `const char *'
simple_server_main.cpp:52: cannot convert `data' from type `string' to type `const void *'

Hoe kan ik die string converteren naar at er gevraagd wordt?
(ik meen een char-array?:P)

  • Zynth
  • Registratie: September 2001
  • Laatst online: 29-07 15:30
dit is de code.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#include    <stdio.h>
#include    <sys/types.h>
#include    <sys/stat.h>
#include    <termios.h>
#include    <unistd.h>
#include    <errno.h>
#include    <fcntl.h>
#include "ServerSocket.h"
#include "SocketException.h"
#include <string>


int fd;

void die(char *s) {
    if (errno) perror(s);
    else fprintf(stderr,"%s\n",s);
    exit(-1);
}

int main() {
struct termios termios;

    fd=open("/dev/ttyS0",O_WRONLY|O_EXCL);
    if (fd==-1) die("open");
    if (tcgetattr(fd,&termios)==-1) die("tcgetattr");
    cfmakeraw(&termios);
    cfsetospeed(&termios,B19200);
    if (tcsetattr(fd,TCSANOW,&termios)==-1) die("tcsetattr");
    usleep(850000);
    write(fd,"\004\024\030",3); /* hide cursor/wrap=off/scroll=off */

  std::cout << "running....\n";

  try
    {
    // Create the socket
    ServerSocket server ( 30000 );

    while ( true )
    {

      ServerSocket new_sock;
      server.accept ( new_sock );

      try
        {
        while ( true )
        {
        std::string data;
          new_sock >> data;
//nu moet hij die string writen...
//maar dat gaat fout, want hij zegt: cannot convert `data' from type `string' to type `const char *'
          write(fd,/*Write string "data" here*/,5);
        }
        }
      catch ( SocketException& ) {}

    }
    }
  catch ( SocketException& e )
    {
    std::cout << "Exception was caught:" << e.description() << "\nExiting.\n";
    }

  return 0;
}

Het commentaar van wat er fout gaat staat erin.
Iemand een idee??

  • Orphix
  • Registratie: Februari 2000
  • Niet online
De std::string class heeft de member functie c_str(). Deze geeft een const char* terug. De oude C-manier om strings op te slaan dus.

  • marcusk
  • Registratie: Februari 2001
  • Laatst online: 26-09-2023
data.c_str() denk ik.

  • nhimf
  • Registratie: September 2000
  • Laatst online: 31-08 19:16

nhimf

Lekker belangrijk allemaal

Je moet niet vergeten dat een char * een pointer is en een string niet. Subtiel verschil en dat kan een hoop problemen zorgen.

je kan ook niet dit doen:
char *a = "aaaa", *b = "bbbb";
a = b;

het werkt wel maar je stelt de pointers dan gelijk niet de waardes ervan (zegmaar)
Dat is dus ook hier het geval. Je moet een char * in de write stoppen en niet een string.

Ik stink niet, ik ruik gewoon anders


  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 11-09 18:38
Op dinsdag 19 maart 2002 23:36 schreef Zynth het volgende:
Ik heb een C programmaatje, maar ik krijg de volgende compile-fout:
code:
1
2
simple_server_main.cpp:52: cannot convert `data' from type `string' to type `const char *'
simple_server_main.cpp:52: cannot convert `data' from type `string' to type `const void *'

Hoe kan ik die string converteren naar at er gevraagd wordt?
(ik meen een char-array?:P)
.data() als je een char const* wil; .c_str() als je er ook nog een \0 achter wil. Gezien het feit dat je geen lengte meegeeft zal het waarschijnlijk .c_str() moeten zijn.

Dat dit niet automatisch gaat is om code als
code:
1
2
3
4
5
std::string s;
if ( s )
{
  ...
}

te voorkomen: Als std::string naar char* converteert en verder naar bool, dan is zou het bovenstaande legaal zijn
(en altijd waar)

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


Verwijderd

Op woensdag 20 maart 2002 00:16 schreef nhimf het volgende:
je kan ook niet dit doen:
char *a = "aaaa", *b = "bbbb";
a = b;

het werkt wel maar je stelt de pointers dan gelijk niet de waardes ervan (zegmaar)
Dat is dus ook hier het geval. Je moet een char * in de write stoppen en niet een string.
Yohow, dat kan dus mooi wel... Slim is anders, maar het kan. Als je trouwens een const char* moet leveren van een string is dat geen enkel probleem, omdat de functie er in principe nix mee uitvoert (const). Manipulatie van deze pointer kan echter wel problemen opleveren... En dat is pokkewerk om dat te vinden :)
Pagina: 1