Hi
ich habe ein Problem mit Createthreat.
und zwar arbeite ich an einem IRC bot. Das dingen ist in C geschrieben, nutz die winsock2 und funzt auch wunderbbar. bis auf eine Ausnahme:
createthreat macht manchmal probleme!
hier erstmal der Code:
Der Bot wartet auf ein JOIN, und versucht dann den Usernamen auszulesen.
Derwird zu 99.9% der fälle auch richtig ausgelesen. aber manchmal kommt es vor, das ein Falscher Pointer übermittelt wird, obwohl der username richtig ausgelesen wurde. im ersten priintf steht dann felixh, im 2ten ein teil der gesendeten Daten aus der näcshten Zeile... Im anderen moment funktioniert aber alles... dann steht in beiden Printfs korrekt der Username drin...
habe ich da evtl einen Fehler eingebaut? Wenn ja, wie kann ich ihn beheben?
ach: die daten werden Zeilenweise ausgelesen. Für jeden Zeilenumbruch wird einmal eine while-schleife durchlaufen...
===EDIT===
OK, nach einem Geistesblitz hat sich das problem gklärt...
für alle mit ähnlichen problemen:
der Threat läuft ja mit dem eigentlichen Programm gleichzeitig... in dieser zeit werden weitre munter Daten runtergeladen... der Pointer bleibt gültig, aber es steht dann ein anderer text drin...
lösung
aer malloc paltz für neuen string schaffen, und den dann da reinkopieren 
ich habe ein Problem mit Createthreat.
und zwar arbeite ich an einem IRC bot. Das dingen ist in C geschrieben, nutz die winsock2 und funzt auch wunderbbar. bis auf eine Ausnahme:
createthreat macht manchmal probleme!
hier erstmal der Code:
Code:
DWORD WINAPI user_online_(LPVOID data)
{
char buf[1024];
printf("%s\n\n", data);
user_online((char*)data, sock);
}
[...]
sprintf(buf, "JOIN #%s", channel_);
if((strstr(buffer, buf)) != NULL)
{
buff1 = strchr(buffer, ':') +1;
buff2 = strchr(buff1, '|');
if(!buff2)
buff2 = strchr(buff1, '!');
if(buff2)
*buff2 = '\0';
else
{
sprintf(buf, "Schwerer Fehler in main(): Konnte User Namen nicht ermitteln! Dbg-Info: buff1=%s buff2=%s Command=%s", buff1, buff2, buffer);
}
printf("%s\n\n", buff1);
threat = CreateThread(NULL, 0, user_online_, buff1, 0, NULL);
}
Der Bot wartet auf ein JOIN, und versucht dann den Usernamen auszulesen.
Derwird zu 99.9% der fälle auch richtig ausgelesen. aber manchmal kommt es vor, das ein Falscher Pointer übermittelt wird, obwohl der username richtig ausgelesen wurde. im ersten priintf steht dann felixh, im 2ten ein teil der gesendeten Daten aus der näcshten Zeile... Im anderen moment funktioniert aber alles... dann steht in beiden Printfs korrekt der Username drin...
habe ich da evtl einen Fehler eingebaut? Wenn ja, wie kann ich ihn beheben?
ach: die daten werden Zeilenweise ausgelesen. Für jeden Zeilenumbruch wird einmal eine while-schleife durchlaufen...
===EDIT===
OK, nach einem Geistesblitz hat sich das problem gklärt...
für alle mit ähnlichen problemen:
der Threat läuft ja mit dem eigentlichen Programm gleichzeitig... in dieser zeit werden weitre munter Daten runtergeladen... der Pointer bleibt gültig, aber es steht dann ein anderer text drin...
lösung