Ou encore...
sprintf(str,"Host %230s:%d", server_url->hostname, server_url->port)
Ou meme:
sprintf(str, "Host %*s:%d", 230,server_url->hostname, server_url->port)
Mais pour un respect des GNU Coding Standards, faut faire une allocation dynamique, puisqu'on y dit qu'il vaut mieux eviter les nombres magiques, comme ici ce 250.
Donc:
char *str = NULL;
#define HOST_STRING "Host : %s:%d"
str = malloc(strlen(server_url->hostname) /* ne contient pas le caractere NULL a la fin: c'est un strlen() */
+ sizeof(HOST_STRING) /* contient le caractere NULL a la fin: c'est un sizeof() */
+ 10 /* taille de l'entier */
- 4 /* moins %s%d qui fait 4 caracteres */
);
if(!str) { /* traiter l'erreur. Il faut toujours envisager ce cas */ }
Et une remarque: on ne met pas de (char*) ou autre cast devant un malloc() en C.
machin = malloc() -> c'est du C
machin = (char *)malloc() -> c'est du C++
Je ne sais pas d'ou vient ce reflexe assez courant que de mettre un cast devant le malloc() en C, mais c'est une erreur.
Et si votre compilateur se plaint, c'est que vous avez probablement oublie de mettre #include <stdlib.h>. Rajoutez ce #include <stdlib.h> au lieu de mettre un cast devant le malloc() !
[^] # Re: C'était déjà dans les journaux linuxfr le 27/9
Posté par a_jr . En réponse à la dépêche Faille de sécurité exploitable à distance dans mplayer. Évalué à 6.
sprintf(str,"Host %230s:%d", server_url->hostname, server_url->port)
Ou meme:
sprintf(str, "Host %*s:%d", 230,server_url->hostname, server_url->port)
Mais pour un respect des GNU Coding Standards, faut faire une allocation dynamique, puisqu'on y dit qu'il vaut mieux eviter les nombres magiques, comme ici ce 250.
Donc:
Et une remarque: on ne met pas de (char*) ou autre cast devant un malloc() en C.
machin = malloc() -> c'est du C
machin = (char *)malloc() -> c'est du C++
Je ne sais pas d'ou vient ce reflexe assez courant que de mettre un cast devant le malloc() en C, mais c'est une erreur.
Et si votre compilateur se plaint, c'est que vous avez probablement oublie de mettre #include <stdlib.h>. Rajoutez ce #include <stdlib.h> au lieu de mettre un cast devant le malloc() !
Le bonjour chez vous,
Yves