Predict len ​​string sprintf () 'ed?

Is there any function somewhere that I can use to predict the space sprintf () will need? IOW, can I call the function size_t predict_space ("% s \ n", some_string), which will return the length of the C-string to be obtained from sprintf ("% s \ n", some_string)?

+2
source share
4 answers

In C99, snprintf (note: Windows and SUSv2 do not provide a snprintf (or _snprintf) standard implementation) :

  7.19.6.5 The snprintf function

        Synopsis

        [#1]

                #include <stdio.h>
                int snprintf (char * restrict s, size_t n,
                        const char * restrict format, ...);

        Description

        [# 2] The snprintf function is equivalent to fprintf, except
        that the output is written into an array (specified by
        argument s) rather than to a stream.  If n is zero, nothing
        is written, and s may be a null pointer.  Otherwise output
        characters beyond the n-1st are discarded rather than being
        written to the array, and a null character is written at the
        end of the characters actually written into the array.  If
        copying takes place between objects that overlap, the
        behavior is undefined.

        Returns

        [# 3] The snprintf function returns the number of characters
        that would have been written had n been sufficiently large,
        not counting the terminating null character, or a negative
        value if an encoding error occurred.  Thus, the null-
        terminated output has been completely written if and only if
        the returned value is nonnegative and less than n.

For instance:

 len = snprintf(NULL, 0, "%s\n", some_string); if (len > 0) { newstring = malloc(len + 1); if (newstring) { snprintf(newstring, len + 1, "%s\n", some_string); } } 
+9
source

Usage can use snprintf () with size 0 to determine exactly how many bytes are required. The price is that the string is actually formatted twice.

+6
source

You can use snprintf for this, as in

 sz = snprintf (NULL, 0, fmt, arg0, arg1, ...); 

But see the Autoconf portability notes on snprintf .

+2
source

In most cases, you can compute it by adding the length of the string you are combining and occupying the maximum length for numerical values ​​based on the format you use.

+2
source

Source: https://habr.com/ru/post/885627/


All Articles