Je sais comment passer une quantité inconnue d'arguments de types inconnus à une fonction. Je veux dire quelque chose comme ceci:struct comme argument inconnu
char* plugins_entry(const char* data, ...);
Maintenant, je suis en train de passer un struct à part quelques autres arguments à cette fonction. J'ai la même structure déclarée (ou définie?) Dans les deux fichiers (main.c et plugins.c). Mais quand j'essaie de "filtrer" la structure irc transmise depuis le main.c out et d'analyser les données dans la structure irc à partir du plugins.c, je n'ai rien d'utile. Quand j'appelle la fonction j'obtiens un défaut de segmentation.
Ceci est la partie importante de la main.c:
struct irc_data {
char nick[32];
char user[32];
char host[64];
char chan[32];
char message[512];
int is_ready;
};
....
int main(int argc, char** argv) {
....
struct irc_data *irc = malloc(sizeof(struct irc_data));
....
(*lib_plugin)("r",irc); // call the function in plugins.c
....
}
Et voici le trou plugins.c:
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
#include <string.h>
struct irc_data{
char nick[32];
char user[32];
char host[64];
char chan[32];
char message[512];
int is_ready;
};
char* plugins_entry(const char* data, ...) {
int i;
struct irc_data *irc = malloc(sizeof(struct irc_data));
va_list args;
va_start(args, data);
for(i=0; data[i] != '\0'; ++i){
if(data[i] == 'r'){
irc = data[i];
}
}
va_end(args);
printf("\n\n------------------------\n");
printf("What we got here: %s\n",irc->nick);
printf("\n------------------------\n\n");
return "done";
}
Alors, je suis sûr que je suis en train de faire quelque chose de mal avec les pointeurs.
Pourriez-vous s'il vous plaît aide-moi?
Merci
~ Tectu
Fyi, vous ne devriez pas utiliser de tampons de taille fixe pour autre chose que 'message' (où 512 est requis selon la RFC). Tout le reste dépend de l'ircd utilisé. Bien qu'il soit peu probable que les pseudos aient une longueur supérieure à 30 caractères et que les noms d'utilisateur/identifiants ne dépassent pas 10 caractères, le nom d'un canal peut très bien être supérieur à 32 caractères. – ThiefMaster