Condividi tramite


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

  • sizeOfBuffer
    Numero massimo di caratteri da archiviare.

  • format
    stringa del Formato-controllo

  • argument
    argomenti facoltativi

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

Flusso I/O

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 di vprintf