# \[C\] fprintf et char\*... ?

**URL:** <https://www.debian-fr.org/t/c-fprintf-et-char/8748>\
**Category:** Programmation\
**Created:** [Février 20, 2016, 4:13 UTC](https://www.debian-fr.org/t/c-fprintf-et-char/8748 "2016-02-20T16:13:01Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![Pingoo\_Pat](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/p/d2c977/32.png) [@Pingoo\_Pat](https://www.debian-fr.org/u/Pingoo_Pat)\
**Post date:** [Février 20, 2016, 4:13 UTC](https://www.debian-fr.org/t/c-fprintf-et-char/8748/1 "2016-02-20T16:13:01Z")

</div>

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 :

```auto
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) :

```auto
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 !

---

<div class="post-metadata">

**Author:** ![Doby](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/d/58f4c7/32.png) [@Doby](https://www.debian-fr.org/u/Doby)\
**Post date:** [Février 20, 2016, 4:13 UTC](https://www.debian-fr.org/t/c-fprintf-et-char/8748/2 "2016-02-20T16:13:01Z")

</div>

@ 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 …

---

<div class="post-metadata">

**Author:** ![ed](https://www.debian-fr.org/user_avatar/www.debian-fr.org/ed/32/5886_2.png) [@ed](https://www.debian-fr.org/u/ed)\
**Post date:** [Février 20, 2016, 4:13 UTC](https://www.debian-fr.org/t/c-fprintf-et-char/8748/3 "2016-02-20T16:13:07Z")

</div>

tu sais pas lire toi !

extrait du man:

> [@](#):
>
> ```
> La fonction inet_ntoa() convertit l'adresse Internet de l'hôte in donne
> dans l'ordre des octets du réseau en une chaîne de caractères dans la
> notation avec nombres et points. La chaîne est renvoyée dans un tampon
> alloué statiquement, qui est donc écrasé à chaque appel.
> 
> ```

donc:

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

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

free(src); free(dst);
```

---

<div class="post-metadata">

**Author:** ![Pingoo\_Pat](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/p/d2c977/32.png) [@Pingoo\_Pat](https://www.debian-fr.org/u/Pingoo_Pat)\
**Post date:** [Février 20, 2016, 4:13 UTC](https://www.debian-fr.org/t/c-fprintf-et-char/8748/4 "2016-02-20T16:13:21Z")

</div>

Ups ;x

Merci 😊

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

```auto
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.
