sprintf_s, _sprintf_s_l, swprintf_s, _swprintf_s_l
Scrittura formattata i dati in una stringa.queste sono versioni di sprintf, _sprintf_l, swprintf, _swprintf_l, __swprintf_l con i miglioramenti della sicurezza come descritto in Funzionalità di sicurezza in CRT.
int sprintf_s(
char *buffer,
size_t sizeOfBuffer,
const char *format [,
argument] ...
);
int _sprintf_s_l(
char *buffer,
size_t sizeOfBuffer,
const char *format,
locale_t locale [,
argument] ...
);
int swprintf_s(
wchar_t *buffer,
size_t sizeOfBuffer,
const wchar_t *format [,
argument]...
);
int _swprintf_s_l(
wchar_t *buffer,
size_t sizeOfBuffer,
const wchar_t *format,
locale_t locale [,
argument]…
);
template <size_t size>
int sprintf_s(
char (&buffer)[size],
const char *format [,
argument] ...
); // C++ only
template <size_t size>
int swprintf_s(
wchar_t (&buffer)[size],
const wchar_t *format [,
argument]...
); // C++ only
Parametri
buffer
Percorso di archiviazione per l'outputsizeOfBuffer
Numero massimo di caratteri da archiviare.format
stringa del Formato-controlloargument
argomenti facoltativilocale
le impostazioni locali da utilizzare.
Per ulteriori informazioni, vedere Specifiche di formato.
Valore restituito
Il numero di caratteri scritto, oppure - 1 se si è verificato un errore.se buffer o format è un puntatore null, sprintf_s e swprintf_s restituiscono -1 e set errno in EINVAL.
sprintf_s restituisce il numero di byte archiviati in buffer, non calcola il carattere di terminazione null.swprintf_s restituisce il numero di caratteri di tipo " wide " archiviati in buffer, non calcola il carattere di tipo " wide " di terminazione null.
Note
sprintf_s la funzione formatta e contiene una stringa di caratteri e di valori in buffer.ciascuno argument (se presenti) viene convertito e restituito in base alla specifica di formato corrispondente in format.Il formato è costituita da caratteri normali e ha lo stesso form e di funzione format argomento per printf.Un carattere null viene aggiunto dopo l'ultimo carattere scritto.Se copiare si verifica tra stringhe che si sovrappongono, il comportamento sarà indefinito.
Una differenza fondamentale tra sprintf_s e sprintf è quello sprintf_s controlla la stringa di formato per i caratteri di formattazione validi, mentre sprintf solo controlli se la stringa di formato o il buffer è NULL puntatori.Se il controllo non riesce, il gestore non valido di parametro viene richiamato, come descritto in Convalida dei parametri.Se l'esecuzione è consentita per continuare, la funzione restituisce -1 e set errno in EINVAL.
Un'altra differenza fondamentale tra sprintf_s e sprintf è quello sprintf_s accetta un parametro di lunghezza che specifica la dimensione del buffer di output in caratteri.Se il buffer è troppo piccolo per il testo quindi che venga stampato il buffer viene impostato su una stringa vuota e il gestore non valido di parametro viene richiamato.A differenza di snprintf, sprintf_s garantisce che il buffer sarà con terminazione null (a meno che le dimensioni del buffer siano zero).
swprintf_s è una versione a caratteri estesi di sprintf_s; gli argomenti del puntatore su swprintf_s sono le stringhe di caratteri estesi.Rilevamento degli errori di codifica in swprintf_s può essere diverso da quello di sprintf_s.le versioni di queste funzioni con _l il suffisso è identico con la differenza che utilizzano il parametro delle impostazioni locali passato alle impostazioni locali del thread corrente.
In C++, utilizzando queste funzioni è semplificato dagli overload del modello; gli overload possono dedurre la lunghezza del buffer automaticamente (che elimina la necessità di specificare un argomento di dimensione) e possono sostituire automaticamente le funzioni precedenti e non sicure con le più recenti, controparti sicure.Per ulteriori informazioni, vedere Assicurarsi che gli overload del modello.
Sono disponibili versioni di sprintf_s tale controllo aggiuntivo offrono su ciò che si verifica se il buffer è troppo piccolo.Per ulteriori informazioni, vedere _snprintf_s, _snprintf_s_l, _snwprintf_s, _snwprintf_s_l.
Mapping di routine a testo generico
routine di TCHAR.H |
_UNICODE & _MBCS non definiti |
_MBCS definito |
_UNICODE definito |
---|---|---|---|
_stprintf_s |
sprintf_s |
sprintf_s |
swprintf_s |
_stprintf_s_l |
_sprintf_s_l |
_sprintf_s_l |
_swprintf_s_l |
Requisiti
routine |
Intestazione di associazione |
---|---|
sprintf_s, _sprintf_s_l |
<stdio.h> |
swprintf_s, _swprintf_s_l |
<stdio.h> o <wchar.h> |
per informazioni di compatibilità aggiuntive, vedere compatibilità nell'introduzione.
Esempio
// crt_sprintf_s.c
// This program uses sprintf_s 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_s( buffer, 200, " String: %s\n", s );
j += sprintf_s( buffer + j, 200 - j, " Character: %c\n", c );
j += sprintf_s( buffer + j, 200 - j, " Integer: %d\n", i );
j += sprintf_s( buffer + j, 200 - j, " Real: %f\n", fp );
printf_s( "Output:\n%s\ncharacter count = %d\n", buffer, j );
}
// crt_swprintf_s.c
// wide character example
// also demonstrates swprintf_s returning error code
#include <stdio.h>
int main( void )
{
wchar_t buf[100];
int len = swprintf_s( buf, 100, L"%s", L"Hello world" );
printf( "wrote %d characters\n", len );
len = swprintf_s( buf, 100, L"%s", L"Hello\xffff world" );
// swprintf_s fails because string contains WEOF (\xffff)
printf( "wrote %d characters\n", len );
}
Equivalente .NET Framework
[M:System::String::Format]
Vedere anche
Riferimenti
fprintf, _fprintf_l, fwprintf, _fwprintf_l
printf, _printf_l, wprintf, _wprintf_l
scanf, _scanf_l, wscanf, _wscanf_l