[C] fprintf et char*... ?

Plop les gens,

Voilà j’ai une question qui va amener une réponse certainement très con, je le sens et je fais pénitence à l’avance.

Plutôt qu’un long discours, un petit bout de code :

const struct my_ip* ip; /* structure contenant les données d'un paquet IP */

char* addr_src = inet_ntoa(ip->ip_src);
char* addr_dst = inet_ntoa(ip->ip_dst);

fprintf(stdout, "%s %s\n", addr_src, addr_dst);

Affichera (par exemple) :

pat@LittlePing00 : 192.168.11.101 192.168.11.101

C’est à dire deux fois addr_src.

Vraissemblablement, y’a un problème de buffer. Comment faire pour corriger le problème sans avoir à casser le fprintf en deux ?

Merci !

@ Pingoo Pat:
La de suite je ne vois pas de moyen direct pour vider le buffer stdout sans casser le fprintf en 2…Sinon ce que tu peux faire c’est l’afficher en mode carcatere par caractere avec un entier qui te sert de pointeur flottant et qui change de chaine source au bout de x iteration, x etant la longueur d’une chaine ip.
Tu me dis ce que tu en penses …

tu sais pas lire toi !

extrait du man:

donc:

src = strdup(ntoa(...));
dst = strdup(ntoa(...));

printf("%s %s", src, dst);

free(src); free(dst);

Ups ;x

Merci :blush:

edit : ça m’apprendra à pas lire les manpages en entier…

The return value of inet_ntoa() may point to static data that may be overwritten by subsequent calls to inet_ntoa().

/me se flagelle avec des orties fraîches.