vsnprintf()
- , , , .
Microsoft , , , , : , , %n
, .
, , . . , , , undefined. , , , .
2 vsnprintf()
, K, , , :
int vsprintf_s(char * restrict s, rsize_t n,
const char * restrict format,
va_list arg);
int vsnprintf_s(char * restrict s, rsize_t n,
const char * restrict format,
va_list arg);
- snprintf
-:
%n
.n
0
.s
, snprintf()
n
0
.vsprintf_s
vsnprintf_s
, , n-1
: , 0
, , vsnprintf
, vsnprintf_s
do.
, snprintf()
, :
int vasprintf(char **strp, const char *format, va_list ap) {
va_list arg;
int ret;
if (!strp) {
errno = EINVAL;
return -1;
}
va_copy(arg, ap);
ret = vsnprintf(NULL, 0, format, arg);
va_end(arg);
*strp = NULL;
if (ret < 0 || (*strp = malloc(ret + 1)) == NULL) {
return -1;
}
return vsnprintf(*strp, ret + 1, format, ap);
}
vnsprintf
vsprintf_s
, vsprintf_s
: . vsnprintf_s
, NULL
, .
: vsnprintf
vsnprintf_s
1
NULL, 0
:
int vasprintf(char **strp, const char *format, va_list ap) {
char buf[1];
va_list arg;
int ret;
if (!strp) {
errno = EINVAL;
return -1;
}
va_copy(arg, ap);
ret = vsnprintf_s(buf, 1, format, arg);
va_end(arg);
*strp = NULL;
if (ret < 0 || (*strp = malloc(ret + 1)) == NULL) {
return -1;
}
return vsnprintf_s(*strp, ret + 1, format, ap);
}
, : Visual Studio , :
#ifdef _WIN32
#define _CRT_SECURE_NO_WARNINGS
#endif
.
, , . gcc
clang
-Wall
, . Visual Studio /W4
.