Toon posts:

[C] eerste woord uit een string halen.

Pagina: 1
Acties:
  • 43 views sinds 30-01-2008

Verwijderd

Topicstarter
Met onderstaande code wil ik het volgende berijken:

Komt een bericht van de socket, en als dat bericht uit meerdere woorden bestaat, moet alleen de eerste terug worder gezonden.

Het zenden werkt perfect, alleen als ik maar 1 woord stuur, komt er niets terug :?

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
/*--------------------------------------------------------------------*/
/*--- Child - process command                                                     ---*/
/*--------------------------------------------------------------------*/
void Child(void* arg){
    char msg[100];
    char command[20];
    char empty[1];
    int bytes_read;
    int clientsd = *(int *)arg;
    do{
    //ontvang data...msg = data bytes_read = data size
    bytes_read = recv(clientsd, msg, sizeof(msg), 0);
    if ( bytes_read < 0 )
        perror("Read socket");  
    //zoek spatie in msg
    char * pch;
    pch=strchr(msg,' ');
    if (pch!=NULL){
        strncpy (command,msg,pch-msg);
    }  
    else {
        strcpy(command,msg);
    }
    send(clientsd, command, pch-msg, 0);
    }
    while (strncmp(msg, "bye\r", 4) != 0  ||  bytes_read < 0 );
    close(clientsd);
    exit(0);
}

[ Voor 3% gewijzigd door Verwijderd op 28-08-2003 16:13 ]


  • whoami
  • Registratie: December 2000
  • Laatst online: 22:54
Heb je je stukje code zelf al eens gedebugged?
Zonee: doe dat eens.

https://fgheysels.github.io/


  • dotcode
  • Registratie: Augustus 2003
  • Laatst online: 14-08 11:19

dotcode

///\00/\\

Volgens my ben je dit vergeten:

if (pch==NULL){
strncpy (command,msg,pch-msg);
command[pch-msg] = '0'; /* geef eiden van string aan*/
}
else {
strcpy(command,msg);
}

BTW bij je else geeft een buffer overflow...

Verwijderd

Topicstarter
yep die overflow komt doordat == natuurlijk != moet zijn :)

en nee hoor, maakt nog niets uit, nog steeds het zelfde probleem...

zolang er een spatie in het bericht zit gaat het goed, geen spatie en er komt niets terug ....

[ Voor 53% gewijzigd door Verwijderd op 28-08-2003 16:16 ]


  • RickN
  • Registratie: December 2001
  • Laatst online: 14-06-2025
Jaja, als pch NULL is ga jij er vrolijk nog wat vanaf trekken.....

He who knows only his own side of the case knows little of that.


  • MisterData
  • Registratie: September 2001
  • Laatst online: 21-08 20:35
Is het niet handiger om strtok te gebruiken (en dan een spatie als delimiter)? Zie www.cppreference.com :)

Verwijderd

Topicstarter
RickN schreef op 28 augustus 2003 @ 16:15:
Jaja, als pch NULL is ga jij er vrolijk nog wat vanaf trekken.....
dat heb ik in de code die ik hier heb niet hoor....

zag terwijl ik het topic opende nog wat veranderd in de code in het topic.... niet slim :)

  • RickN
  • Registratie: December 2001
  • Laatst online: 14-06-2025
Verwijderd schreef op 28 augustus 2003 @ 16:18:
[...]


dat heb ik in de code die ik hier heb niet hoor....

zag terwijl ik het topic opende nog wat veranderd in de code in het topic.... niet slim :)
Je doet het anders nog steeds in de code die er NU staat.

He who knows only his own side of the case knows little of that.


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

C:
1
send(clientsd, command, pch-msg, 0);

Vervang eens door iets dat niet pch afhankelijk is :Z

Basic debugging, dicht.

Professionele website nodig?

Pagina: 1

Dit topic is gesloten.