sprintf, _sprintf_l, swprintf, _swprintf_l, __swprintf_l
Scrivere dati formattati in una stringa. Sono disponibili versioni più sicure di alcune di queste funzioni; vedere sprintf_s, _sprintf_s_l, swprintf_s, _swprintf_s_l. Le versioni sicure di swprintf e _swprintf_l non accettano il parametro count.
int sprintf(
char *buffer,
const char *format [,
argument] ...
);
int _sprintf_l(
char *buffer,
const char *format,
locale_t locale [,
argument] ...
);
int swprintf(
wchar_t *buffer,
size_t count,
const wchar_t *format [,
argument]...
);
int _swprintf_l(
wchar_t *buffer,
size_t count,
const wchar_t *format,
locale_t locale [,
argument] ...
);
int __swprintf_l(
wchar_t *buffer,
const wchar_t *format,
locale_t locale [,
argument] ...
);
template <size_t size>
int sprintf(
char (&buffer)[size],
const char *format [,
argument] ...
); // C++ only
template <size_t size>
int _sprintf_l(
char (&buffer)[size],
const char *format,
locale_t locale [,
argument] ...
); // C++ only
template <size_t size>
int swprintf(
wchar_t (&buffer)[size],
const wchar_t *format [,
argument]...
); // C++ only
template <size_t size>
int _swprintf_l(
wchar_t (&buffer)[size],
const wchar_t *format,
locale_t locale [,
argument] ...
); // C++ only
Parametri
buffer
Percorso di archiviazione per l'outputcount
Numero massimo di caratteri da archiviare nella versione Unicode per questa funzione.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. Se buffer o format è un puntatore null, 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.
sprintf restituisce il numero di byte memorizzato in buffer, senza contare il carattere null terminale. swprintfrestituisce il numero di caratteri wide memorizzato in buffer, senza contare il carattere wide null finale.
Note
La funzione sprintf formatta e memorizza una serie di caratteri e di valori in 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 la stessa forma e la stessa funzione dell'argomento format per la funzione printf. Un carattere null viene aggiunto dopo l'ultimo carattere scritto. Se la copia avviene tra stringhe che si sovrappongono, il comportamento non è definito.
Nota sulla sicurezza |
---|
Con l'utilizzo di sprintf non è possibile limitare il numero di caratteri scritti, ovvero il codice che utilizza sprintf è soggetto a sovraccarichi del buffer.Utilizzare la funzione correlata _snprintf che specifica un numero massimo di caratteri da scrivere in buffer, oppure utilizzare _scprintf per determinare la grandezza necessaria per un buffer.Inoltre, assicurarsi che format non sia una stringa definita dall'utente. |
swprintf è una versione a caratteri estesi di sprintf; gli argomenti puntatori per swprintf sono stringhe a caratteri estesi. Il rilevamento degli errori di codifica in swprintf può essere diverso da quello di sprintf. swprintf e fwprintf si comportano in modo identico eccetto per il fatto che swprintf scrive l'output a una stringa anziché a una destinazione di tipo FILE e swprintf 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 in ingresso invece di utilizzare quelle del thread corrente.
swprintf è conforme allo standard ISO C, che richiede il secondo parametro, count, di tipo size_t. Per definire il comportamento non standard precedente, definire _CRT_NON_CONFORMING_SWPRINTFS. In una versione futura, il comportamento precedente potrebbe essere rimosso, in questo modo sarà possibile modificare il codice per utilizzare il nuovo comportamento conforme.
In C++, queste funzioni presentano overload dei modelli che richiamano le relative controparti sicure e più recenti. Per ulteriori informazioni, vedere Overload di modelli sicuri.
Mapping di routine su testo generico
Routine TCHAR.H |
_UNICODE e _MBCS non definiti |
_MBCS definito |
_UNICODE definito |
---|---|---|---|
_stprintf |
sprintf |
sprintf |
swprintf |
_stprintf_l |
_sprintf_l |
_sprintf_l |
__swprintf_l |
Requisiti
Routine |
Intestazione obbligatoria |
---|---|
sprintf, _sprintf_l |
<stdio.h> |
swprintf, _swprintf_l |
<stdio.h> o <wchar.h> |
Per ulteriori informazioni sulla compatibilità, vedere Compatibilità nell'Introduzione.
Esempio
// crt_sprintf.c
// compile with: /W3
// This program uses sprintf 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( buffer, " String: %s\n", s ); // C4996
j += sprintf( buffer + j, " Character: %c\n", c ); // C4996
j += sprintf( buffer + j, " Integer: %d\n", i ); // C4996
j += sprintf( buffer + j, " Real: %f\n", fp );// C4996
// Note: sprintf is deprecated; consider using sprintf_s instead
printf( "Output:\n%s\ncharacter count = %d\n", buffer, j );
}
// crt_swprintf.c
// wide character example
// also demonstrates swprintf returning error code
#include <stdio.h>
int main( void )
{
wchar_t buf[100];
int len = swprintf( buf, 100, L"%s", L"Hello world" );
printf( "wrote %d characters\n", len );
len = swprintf( buf, 100, L"%s", L"Hello\xffff world" );
// swprintf fails because string contains WEOF (\xffff)
printf( "wrote %d characters\n", len );
}
Equivalente .NET Framework
Vedere anche
Riferimenti
fprintf, _fprintf_l, fwprintf, _fwprintf_l
printf, _printf_l, wprintf, _wprintf_l
scanf, _scanf_l, wscanf, _wscanf_l