Condividi tramite


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'output

  • count
    Numero massimo di caratteri da archiviare nella versione Unicode per questa funzione.

  • format
    Stringa di controllo del formato

  • argument
    Argomenti facoltativi

  • locale
    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 sicurezzaNota 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

System::String::Format

Vedere anche

Riferimenti

I/O di flusso

fprintf, _fprintf_l, fwprintf, _fwprintf_l

printf, _printf_l, wprintf, _wprintf_l

scanf, _scanf_l, wscanf, _wscanf_l

sscanf, _sscanf_l, swscanf, _swscanf_l

Funzioni vprintf