_sprintf_p, _sprintf_p_l, _swprintf_p, _swprintf_p_l
Scrive dati formattati su una stringa con la possibilità di specificare l'ordine dei parametri utilizzati nella stringa di formato.
int _sprintf_p(
char *buffer,
size_t sizeOfBuffer,
const char *format [,
argument] ...
);
int _sprintf_p_l(
char *buffer,
size_t sizeOfBuffer,
const char *format,
locale_t locale [,
argument] ...
);
int _swprintf_p(
wchar_t *buffer,
size_t sizeOfBuffer,
const wchar_t *format [,
argument]...
);
int _swprintf_p_l(
wchar_t *buffer,
size_t sizeOfBuffer,
const wchar_t *format,
locale_t locale [,
argument] …
);
Parametri
buffer
Percorso di archiviazione per l'outputsizeOfBuffer
Numero massimo di caratteri da archiviare.format
Stringa di controllo del formatoargument
Argomenti facoltativilocale
Impostazioni locali da utilizzare.
Per ulteriori informazioni, vedere Specifiche di formato.
Valore restituito
Numero di caratteri scritti o –1 se si è verificato un errore.
Note
La funzione _sprintf_p formatta e archivia una serie di caratteri e di valori nel buffer. Ogni funzione argument (se presente) viene convertita e restituita in base al formato specificato in format. Il formato è costituito da caratteri ordinari e ha lo stesso formato e la stessa funzione dell'argomento format per la funzione printf_p. Un carattere NULL viene aggiunto dopo l'ultimo carattere scritto. Se la copia avviene tra stringhe che si sovrappongono, il comportamento non è definito. La differenza tra _sprintf_p e sprintf_s è che _sprintf_p supporta i parametri posizionali, che consentono di specificare l'ordine in cui gli argomenti vengono utilizzati nella stringa di formato. Per ulteriori informazioni, vedere Parametri posizionali printf_p.
_swprintf_p è una versione a caratteri "wide" di _sprintf_p. Gli argomenti puntatori per _swprintf_p sono stringhe a caratteri "wide". Il rilevamento degli errori di codifica in _swprintf_p può essere diverso da quello di _sprintf_p. _swprintf_p e fwprintf_p si comportano in modo identico eccetto per il fatto che _swprintf_p scrive l'output a una stringa anziché a una destinazione di tipo FILE e _swprintf_p richiede il parametro countper specificare il numero massimo di caratteri da scrivere. Le versioni di queste funzioni con il suffisso _l sono identiche ad eccezione per il fatto che utilizzano il parametro delle impostazioni locali passato al posto di quelle del thread corrente.
_sprintf_p restituisce il numero di byte archiviato in buffer, senza contare il carattere NULL di terminazione. _swprintf_p restituisce il numero di caratteri "wide" archiviati in buffer, senza contare il carattere esteso NULL di terminazione. Se buffer o format sono un puntatore null, o se la stringa di formato contiene caratteri di formattazione non validi, viene richiamato il gestore di parametro non valido, come descritto in Convalida dei parametri. Se l'esecuzione può continuare, la funzione restituisce -1 e imposta errno su EINVAL.
Mapping di routine di testo generico
Routine TCHAR.H |
_UNICODE & _MBCS non definiti |
_MBCS definito |
_UNICODE definito |
---|---|---|---|
_stprintf_p |
_sprintf_p |
_sprintf_p |
_swprintf_p |
_stprintf_p_l |
_sprintf_p_l |
_sprintf_p_l |
_swprintf_p_l |
Requisiti
Routine |
Intestazione obbligatoria |
---|---|
_sprintf_p, _sprintf_p_l |
<stdio.h> |
_swprintf_p, _swprintf_p_l |
<stdio.h> o <wchar.h> |
Per ulteriori informazioni sulla compatibilità, vedere Compatibilità nell'Introduzione.
Esempio
// crt_sprintf_p.c
// This program uses _sprintf_p to format various
// data and place them in the string named buffer.
//
#include <stdio.h>
int main( void )
{
char buffer[200],
s[] = "computer", c = 'l';
int i = 35,
j;
float fp = 1.7320534f;
// Format and print various data:
j = _sprintf_p( buffer, 200,
" String: %s\n", s );
j += _sprintf_p( buffer + j, 200 - j,
" Character: %c\n", c );
j += _sprintf_p( buffer + j, 200 - j,
" Integer: %d\n", i );
j += _sprintf_p( buffer + j, 200 - j,
" Real: %f\n", fp );
printf( "Output:\n%s\ncharacter count = %d\n",
buffer, j );
}
// crt_swprintf_p.c
// This is the wide character example which
// also demonstrates _swprintf_p returning
// error code.
#include <stdio.h>
#define BUFFER_SIZE 100
int main( void )
{
wchar_t buffer[BUFFER_SIZE];
int len;
len = _swprintf_p(buffer, BUFFER_SIZE, L"%2$s %1$d",
0, L" marbles in your head.");
_printf_p( "Wrote %d characters\n", len );
// _swprintf_p fails because string contains WEOF (\xffff)
len = _swprintf_p(buffer, BUFFER_SIZE, L"%s",
L"Hello\xffff world" );
_printf_p( "Wrote %d characters\n", len );
}
Equivalente .NET Framework
Vedere anche
Riferimenti
_fprintf_p, _fprintf_p_l, _fwprintf_p, _fwprintf_p_l
fprintf, _fprintf_l, fwprintf, _fwprintf_l
_printf_p, _printf_p_l, _wprintf_p, _wprintf_p_l
printf, _printf_l, wprintf, _wprintf_l
scanf, _scanf_l, wscanf, _wscanf_l
sscanf, _sscanf_l, swscanf, _swscanf_l