Probleme de fonction gettok() pour un bot IRC

Signaler
Messages postés
124
Date d'inscription
jeudi 2 janvier 2003
Statut
Membre
Dernière intervention
16 février 2006
-
Messages postés
124
Date d'inscription
jeudi 2 janvier 2003
Statut
Membre
Dernière intervention
16 février 2006
-
Voilou je m'explique, je suis en train de coder un bot IRC mais j'ai un ptit probleme. J'ai cree ma propre fonction gettok (d'ou vient surement le probleme).
J'explique tout d'abbord la premiere partie du programme (que je ne vais pas copier coller car trop long :p) donc c'est pour l'instant un socket simple se connectant a IRC (Quakenet pour etre precis) avec comme partie interessante :
char buffer[1000];
memset(buffer,0,sizeof(buffer));
char buffer2[1000];
memset(buffer,0,sizeof(buffer));
while (loop == '1')
{
while ((*buffer != '\n'))
{
recv(IrcSock,buffer,1,0);
strcat(buffer2,buffer);
}
printf("%s",buffer2);
IrcCheck(buffer2);
strcpy(buffer,"");
strcpy(buffer2,"");
}

Jusque la pas de probleme. Le probleme vient ensuite :
int IrcCheck(char temp[])
{
if ( strstr(temp,"PING") && !strstr(temp,"V") )
{
temp[1] = 'O';
send(IrcSock,temp,strlen(temp),0);
return 0;
}
if ( IrcOk == '0' )
{
if ( strstr(temp,"AUTH") )
{
char *temps = new char [200];
sprintf(temps,"USER Tbot Tbot Tbot :by Tidam\n");
send(IrcSock,temps,strlen(temps),0);
sprintf(temps,"NICK TbotPick\n");
send(IrcSock,temps,strlen(temps),0);
return 0;
}
if ( strcmp(gettok(temp,2," "),"376") == 0 )
{
char *temps = new char [200];
sprintf(temps,"JOIN #Tid@m\n");
send(IrcSock,temps,strlen(temps),0);
IrcOk = '1';
return 0;
}
}
else
{
if ( strcmp(gettok(temp,4," "),IrcChan) == 0 )
{
printf("\n! ! ! test ! ! !\n\n");
if ( strcmp(gettok(temp,2,":"),"salut") == 0 )
{
char *temps = new char [200];
sprintf(temps,"PRIVMSG %s :Salut !\n",IrcChan);
send(IrcSock,temps,strlen(temps),0);
}
return 0;
}
}
}

Tout marche jusqu'a IrcOk='1'; c'est a dire jusqu'a ce qu'il cherche la partie if ( strcmp(gettok(temp,4," "),IrcChan) == 0 ) car le programme plante avant le printf("\n! ! ! test ! ! !\n\n");

La fonction gettok que j'ai faite est la suivante :
char *gettok(char *temp,int num,char *tok)
{
char *token;
token = strtok(temp,tok);
for (int i = 1;i < num;i++)
{
token = strtok(NULL,tok);
}
return token;
}
Elle est bien declaree et marche normalement. Mon probleme est surtout pourquoi if ( strcmp(gettok(temp,2," "),"376") 0 ) marche et pas if ( strcmp(gettok(temp,4," "),IrcChan) 0 ). Si vous voyez j'en serais ravis :p

PS: En ce qui concerne les variables, elles sont toutes bien declarees et IrcChan est du type char *
Marci d'avance !

1 réponse

Messages postés
124
Date d'inscription
jeudi 2 janvier 2003
Statut
Membre
Dernière intervention
16 février 2006
2
Je vient de voir un truc deja:
pour if ( strcmp(gettok(temp,4," "),IrcChan) == 0 ) c'est a peu pres normal car gettok(temp,4," ") n'existe pas enfin il n'y as que 3 token dans la premiere phrase qu'il essaye de lire apres le IrcOk='1'; donc il faudrait modifier ma fonction gettok pour qu'elle arrete quand il n'y as plus rien.
Mais pour if ( strcmp(gettok(temp,3," "),IrcChan) 0 ) ca marche, mais il plante juste apres, if ( strcmp(gettok(temp,2,":"),"salut") 0 ) alors que cette fois ci je recoit
":blabla!bla@blabla.quakenet.org Machin PRIVMSG #channel :salut" ... dans la logique ca devrait marcher ...

Je vais essayer de refaire une fonction gettok lisant toute seule les phrases, car je pense que le probleme vient de cette fonction (je suis même sure :p)