La variable cal_long "devait" servir à quelque chose, puisque je devais écrire:
longueur = snprintf(cal_long,sizeof(cal_long),"mon adresse ip est :%s",myip); // CALCUL DE LA LONGUEUR
Mais qu'une inattention m'a fait écrire (ce qui est évidemment faux):
longueur = snprintf(mystring,sizeof(cal_long),"mon adresse ip est :%s",myip); // CALCUL DE LA LONGUEUR
Quand à la version:
longueur = snprintf(NULL,0,"mon adresse ip est :%s",myip); // CALCUL DE LA LONGUEUR
Elle serait élégante si elle était portable, malheureusement: non.
Extrait de "man snprintf":
CONFORMITÉ
...
En ce qui concerne la valeur de retour de snprintf, SUSv2 et C99 sont en contradiction : lorsque snprintf est appelée avec un argument size=0 lors SUSv2 précise une valeur de retour indéterminée, autre que 1, alors que C99 autorise str à être NULL dans ce cas, et réclame en valeur de retour (comme toujours) le nombre de caractères qui auraient été écrits si la chaîne de sortie avait été assez grande.
...
[^] # Re: Une solution
Posté par abgech . En réponse au message Probleme de memoire, sprintf. Évalué à 1.
longueur = snprintf(cal_long,sizeof(cal_long),"mon adresse ip est :%s",myip); // CALCUL DE LA LONGUEUR
Mais qu'une inattention m'a fait écrire (ce qui est évidemment faux):
longueur = snprintf(mystring,sizeof(cal_long),"mon adresse ip est :%s",myip); // CALCUL DE LA LONGUEUR
Quand à la version:
longueur = snprintf(NULL,0,"mon adresse ip est :%s",myip); // CALCUL DE LA LONGUEUR
Elle serait élégante si elle était portable, malheureusement: non.
Extrait de "man snprintf":