Tu as un fopen() puis un fprintf(), ces fonctions ne font pas leur boulot ? La première chose à faire c'est de vérifier les valeurs de retour de ces deux fonctions. Tu peux aussi utiliser perror() pour en savoir + sur le problème s'il y en a un.
EDIT: La variable buffer (ligne 24) est de type "tableau de pointeurs", ce n'est pas ce qu'attend fprintf() !
PS: il te manque un free(), mais ton malloc() est peut-etre inutile const char *str = "je suis une string";
fprintf() attend une chaîne formatée et une adresse vers UNE chaîne, or ici buffer est un tableau de pointeurs, il faut donc appeler fprintf() dans une boucle pour chaque pointeur, ça ressemblerait à ça :
Gam, effectivement le malloc était inutile. Le fprintf me renvoie une erreur de type segmentation fault quand j'essaye d'écrire le contenu de mon buffer dans le fichier.
Michelbillaud, ce code m'est imposé, je ne peux pas le modifier mais merci de la précision
KevinGL, j'ai essayé de faire une boucle mais j'ai une erreur de type segmentation fault. Une idée d'où vient cette erreur ?
tu peux la tester simplement à part de ton programme … genre :
char buffer[]="Hello world !";
FILE *file=fopen(....);
dump_buffer_to_file(sizeof buffer, buffer, file);
Pour savoir d'où vient un segfault (qui est en général un problème de gestion mémoire accès/allocation/libération/…) il faut utiliser un debuger après avoir compilé ton projet en mode debug (option -g avec gcc et clang).
Une autre méthode est d'utiliser un memory profiler comme valgrind (toujours parès avoir compilé ton programme en mode debug) :
Où tu veux en venir exactement ? Je constate juste que les pointeurs ne sont pas initialisés, à moins que ce soit le rôle de recvfrom() mais ça je n'en sais rien, ça fait 10 ans que je n'ai pas touché aux sockets
Où tu veux en venir exactement ? Je constate juste que les pointeurs ne sont pas initialisés, à moins que ce soit le rôle de recvfrom() mais ça je n'en sais rien, ça fait 10 ans que je n'ai pas touché aux sockets
Alors pourquoi répond tu a la question ? Quand on sait pas on s'abstient ! (Ma question est destiné au PO)
Tu vois bien quand même que ça n'a pas de sens d'envoyer des pointeurs par socket, on se demande si tu sais ce qu'est un pointeur ?
J'essaie d'aiguiller le PO voilà tout. Il faut s'assurer que recvfrom() attend bien un tableau de pointeurs parce que si ce n'est pas le cas ça va créer des problèmes lors du déférencement.
Oui je sais ce qu'est un pointeur ne t'inquiète pas pour ça
Tu parles d'allocation dynamique ? Je comprends pourquoi tu t'es énervé, j'ai parlé de recvfrom() alors que la solution serait plutôt du côté de malloc(), à moins que recvfrom() attende une simple chaîne de caractères, auquel cas on n'a pas nécessairement besoin de pointeurs
Je pense que ce que Rouloude essaye d'expliquer est que le PO s'est trompé en déclarant le buffer comme un tableau de pointeurs sur char et qu'il voulait sans doute le déclarer comme un tableau de char …
Communiquer la valeur d'un pointeur hors son contexte d'exécution est une erreur si le receveur désire l'utiliser par la suite.
Je pense que ce que Rouloude essaye d'expliquer est que le PO s'est trompé en déclarant le buffer comme un tableau de pointeurs sur char et qu'il voulait sans doute le déclarer comme un tableau de char …
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
git is great because Linus did it, mercurial is better because he didn't.