31. december 2003 - 12:07
Der er
21 kommentarer og 1 løsning
sammenligne strings
jeg har har 2 strings der skal sammenlignes... eller fatisk kun starten at den ene string skal være den anden f.eks. 1: PING :2348798273 2: PING hvordan får jeg lavet noget ligende: if( strstr(recvbuf,ping) != NULL ) { recvbuf[2] = 'O'; strcpy(buf,recvbuf); strcat(buf,Memo1->Text.c_str()); strcat(recvbuf," test"); strcat(recvbuf,"\r\n"); Memo1->Text = buf; test = send(thesocket,recvbuf,strlen(buf),0); if(test == INVALID_SOCKET) { WSACleanup(); return; } } else { strcpy(buf,recvbuf); strcat(buf,Memo1->Text.c_str()); Memo1->Text = buf; Edit1->Text = ""; } det her virker ik helt
Annonceindlæg tema
Cloud & AI
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
31. december 2003 - 12:11
#1
Jeg tror at du mener: if( strstr(recvbuf,ping) == recvbuf )
31. december 2003 - 12:12
#2
det virker ikke
31. december 2003 - 12:13
#3
sammenligner den ikke HELE stringsene... jeg skal jo kun se efter om at det er der i...
31. december 2003 - 12:16
#4
strstr(recvbuf,ping) == recvbuf vil returnere true, hvis indholdet af recvbuf starter med hele indholdet af ping Var det ikke det du ville ?
31. december 2003 - 12:16
#5
jov
31. december 2003 - 12:16
#6
sammenligne hele strengene ville være: strcmp(recvbuf,ping) == 0
31. december 2003 - 12:17
#7
Et alternativt approcah vile være: strncmp(recvbuf,ping,strlen(ping)) == 0
31. december 2003 - 12:18
#8
Og husk at alle sammenligner er case sensitive
31. december 2003 - 12:18
#9
ja det har jeg husket if (strstr(recvbuf,ping) == recvbuf) { bla bla } else { bla bla } skulle det ik virke
31. december 2003 - 12:19
#10
char recvbuf[1024]; int test; char buf[10000] = ""; char ping[4] = "PING"; while(1) { memset(recvbuf, 0, 1024); test = recv(thesocket,recvbuf,256,0); if(test == INVALID_SOCKET) { WSACleanup(); return; } if( strstr(recvbuf,ping) == recvbuf )//!= NULL ) { recvbuf[2] = 'O'; strcpy(buf,recvbuf); strcat(buf,Memo1->Text.c_str()); strcat(recvbuf," test"); strcat(recvbuf,"\r\n"); Memo1->Text = buf; test = send(thesocket,recvbuf,strlen(buf),0); if(test == INVALID_SOCKET) { WSACleanup(); return; } } else { strcpy(buf,recvbuf); strcat(buf,Memo1->Text.c_str()); Memo1->Text = buf; Edit1->Text = ""; } }
31. december 2003 - 12:21
#11
char ping[4] = "PING"; skal ihvertfald være: char ping[5] = "PING";
31. december 2003 - 12:22
#12
4 bogstaver + 1 nul byte = 5 men brug: char ping[] = "PING"; så tæller den selv !
31. december 2003 - 12:22
#13
#include <iostream> #include <string.h> using namespace std; int main() { char s1[] = "PING :2348798273"; char s2[] = "PING"; cout << (strcmp(s1,s2)==0) << endl; cout << (strstr(s1,s2)==s1) << endl; cout << (strncmp(s1,s2,strlen(s2))==0) << endl; return 0; } giver korrekt: 0 1 1
31. december 2003 - 12:22
#14
ja og så skal jeg have recvbuf[2] = 'O'; til og være recvbuf[1] = 'O'; den skal nemlig svare pong
31. december 2003 - 12:24
#15
nu virker det... smid lige et svar
31. december 2003 - 12:31
#16
hvordan finder man så noget der er inde i miden af en string... kan man det
31. december 2003 - 12:42
#17
svar
31. december 2003 - 12:42
#18
Ja - array index starter med 0 i C
31. december 2003 - 12:43
#19
kan man godt lave en der reagere på PING hvis der står bla bal PING bla bla
31. december 2003 - 12:43
#20
char s[] = "PING"; char s2[5]; strncpy(s2,s+1,2); s2[2] = '\0'; skulle give s2 værdien "IN"
31. december 2003 - 12:47
#21
Hvis du vil fange "bla bal PING bla bla" skal du bruge strstr(recvbuf,ping) != NULL
31. december 2003 - 12:48
#22
ok tak
Kurser inden for grundlæggende programmering