The swprintf_s function composes a wide string with same test that would be printed if format was used on wprintf.
Instead of being printed, the content is stored in dest. With SAFECLIB_STR_NULL_SLACK defined all elements following the terminating NUL character (if any) written by swprintf_s in the array of dmax wide characters pointed to by dest are nulled when swprintf_s returns.
- Note
- POSIX specifies that
errno is set on error. However, the safeclib extended ES* errors do not set errno, only when the underlying system vswprintf call fails, errno is set.
- Parameters
-
| [out] | dest | pointer to wide string that will be written into |
| [in] | dmax | restricted maximum length of dest |
| [in] | fmt | format-control wide string |
| [in] | ... | optional arguments |
- Precondition
- Neither
dest nor fmt shall be a null pointer.
-
dmax shall not be greater than RSIZE_MAX_WSTR and size of dest.
-
dmax shall not equal zero.
-
dmax shall be greater than wcsnlen_s(dest, dmax).
-
fmt shall not contain the conversion specifier n
-
None of the arguments corresponding to
s is a null pointer. (not yet)
-
No encoding error shall occur.
- Note
- C11 uses RSIZE_MAX, not RSIZE_MAX_WSTR.
-
While narrow strings provide
snprintf, which makes it possible to determine the required output buffer size, there is no equivalent for wide strings (until C11's swprintf_s), and in order to determine the buffer size, the program may need to call swprintf, check the result value, and reallocate a larger buffer, trying again until successful.
- Returns
- If no runtime-constraint violation occurred, the swprintf_s function returns the number of wide characters written in the array, not counting the terminating null wide character. If an encoding error occurred or if n or more wide characters are requested to be written, swprintf_s returns a negative value.
-
If the buffer
dest is too small for the formatted text, including the terminating null, then the buffer is set to an empty string by placing a null wide character at dest[0], and the invalid parameter handler is invoked.
- Return values
-
| >0 | on success |
| -ESNULLP | when dest/fmt is NULL pointer |
| -ESZEROL | when dmax = 0 |
| -ESLEMAX | when dmax > RSIZE_MAX_WSTR |
| -EOVERFLOW | when dmax > size of dest |
| -ESNOSPC | when return value exceeds dmax |
| -EINVAL | when fmt contains n |
| -1 | if an encoding error occurred or if n or more wide characters are requested to be written. |
| 0 | on some other error |
- See also
- vswprintf_s(), snwprintf_s(), vsnprintf_s()