• [^] # Re: Une solution

    Posté par . En réponse au message Probleme de memoire, sprintf. Évalué à 1.

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