Freigeben über


_snprintf, _snprintf_l, _snwprintf, _snwprintf_l

Schreibt formatierte Daten in eine Zeichenfolge.Sicherere Versionen dieser Funktionen sind verfügbar. Weitere Informationen finden Sie unter _snprintf_s, _snprintf_s_l, _snwprintf_s, _snwprintf_s_l.

int _snprintf(
   char *buffer,
   size_t count,
   const char *format [,
   argument] ... 
);
int _snprintf_l(
   char *buffer,
   size_t count,
   const char *format,
   locale_t locale [,
   argument] ... 
);
int _snwprintf(
   wchar_t *buffer,
   size_t count,
   const wchar_t *format [,
   argument] ... 
);
int _snwprintf_l(
   wchar_t *buffer,
   size_t count,
   const wchar_t *format,
   locale_t locale [,
   argument] ... 
);
template <size_t size>
int _snprintf(
   char (&buffer)[size],
   size_t count,
   const char *format [,
   argument] ... 
); // C++ only
template <size_t size>
int _snprintf_l(
   char (&buffer)[size],
   size_t count,
   const char *format,
   locale_t locale [,
   argument] ... 
); // C++ only
template <size_t size>
int _snwprintf(
   wchar_t (&buffer)[size],
   size_t count,
   const wchar_t *format [,
   argument] ... 
); // C++ only
template <size_t size>
int _snwprintf_l(
   wchar_t (&buffer)[size],
   size_t count,
   const wchar_t *format,
   locale_t locale [,
   argument] ... 
); // C++ only

Parameter

  • buffer
    Speicherort für die Ausgabe.

  • count
    Maximale Anzahl von Zeichen zu speichern.

  • format
    Formatsteuerzeichenfolge.

  • argument
    Optionale Argumente.

  • locale
    Das zu verwendende Gebietsschema.

Weitere Informationen finden Sie unter Formatangaben.

Rückgabewert

Führen Sie len Daten die Länge der formatierten Zeichenfolge sein (ohne das abschließende NULL-Zeichen).len und count sind in Bytes für _snprintf, _snwprintffür Breitzeichen.

Wenn len < count, len Zeichen in buffergespeichert sind, wird ein NULL-Abschlusszeichen angefügt, und len wird zurückgegeben.

Wenn len = count, len Zeichen in buffergespeichert werden, wird kein NULL-Abschlusszeichen angefügt, und len wird zurückgegeben.

Wenn len > count, count Zeichen in buffergespeichert werden, wird kein NULL-Abschlusszeichen angefügt, und ein negativer Wert wird zurückgegeben.

Wenn buffer ein NULL-Zeiger ist und count ungleich 0 (null) ist oder format ein NULL-Zeiger ist, wird der Ereignishandler aufgerufen, z. B. ungültige Parameter in Parametervalidierungbeschrieben.Wenn die Ausführung ermöglicht wird, um fortzufahren, geben diese Funktionen festlegen und -1 errno zu EINVALzurück.

Weitere Informationen über diese und andere Fehlercodes finden Sie unter _doserrno, errno, _sys_errlist und _sys_nerr.

Hinweise

Die _snprintf-Funktion formatiert und speichert count oder weniger Zeichen in bufferund fügt ein NULL an, wenn die formatierte Zeichenfolgenlänge kleiner als count Zeichen ist.Jedes argument (falls vorhanden) wird und Ausgabe entsprechend der entsprechenden Formatelement in formatkonvertiert.Das Format besteht aus normalen Zeichen und weist das gleiche Funktion wie das Formular, und format-Argument für printf.Wenn das Kopieren zwischen Zeichenfolgen auftritt, die sich überschneiden, ist das Verhalten nicht definiert.

SicherheitshinweisSicherheitshinweis

Stellen Sie sicher, dass format keine benutzerdefinierte Zeichenfolge ist.Da diese Funktion keine NULL-Terminierung garantiert (insbesondere, wenn der Rückgabewert countist), sollten Sie sicherstellen, dass sie vom Code folgt, der das NULL-Abschlusszeichen hinzugefügt wird.Weitere Informationen finden Sie unter Vermeiden von Pufferüberläufen.

_snwprintf ist eine Breitzeichen-Version von _snprintf. Zeiger auf die Argumente _snwprintf sind Zeichenfolgen mit Breitzeichen.Erkennung von Codierungsfehlern in _snwprintf kann sich von der in _snprintf._snwprintf, wie swprintf, schreibt die Ausgabe in einer Zeichenfolge anstatt an ein Ziel des Typs FILE.

Die Versionen dieser Funktionen mit dem _l Suffix sind identisch, mit der Ausnahme, dass sie verwenden den Gebietsschemaparameter, der anstelle des aktuellen Threads gebietsschemas übergeben wird.

In C++ haben Überladungen Vorlagen, die diese Funktionen aufrufen, um das neueres, Entsprechungen dieser Funktionen.Weitere Informationen finden Sie unter Speichern Sie Vorlagen-Überladungen.

Zuweisung generischer Textroutinen

Tchar.h-Routine

_UNICODE als auch _MBCS nicht definiert

_MBCS definieren

_UNICODE definiert

_sntprintf

_snprintf

_snprintf

_snwprintf

_sntprintf_l

_snprintf_l

_snprintf_l

_snwprintf_l

Anforderungen

Routine

Erforderlicher Header

_snprintf, _snprintf_l

<stdio.h>

_snwprintf, _snwprintf_l

<stdio.h> oder <wchar.h>

Weitere Informationen finden Sie unter Kompatibilität Kompatibilität in der Einführung.

Beispiel

// crt_snprintf.c
// compile with: /W3
#include <stdio.h>
#include <stdlib.h>

#if !defined(__cplusplus)
typedef int bool;
const bool true = 1;
const bool false = 0;
#endif

#define FAIL 0 // change to 1 and see what happens

int main(void)
{
   char buffer[200];
   const static char s[] = "computer"
#if FAIL
"computercomputercomputercomputercomputercomputercomputercomputer"
"computercomputercomputercomputercomputercomputercomputercomputer"
"computercomputercomputercomputercomputercomputercomputercomputer"
"computercomputercomputercomputercomputercomputercomputercomputer"
#endif
   ;
   const char c = 'l'; 
   const int i = 35;
#if FAIL
   const double fp = 1e300; // doesn't fit in the buffer
#else
   const double fp = 1.7320534;
#endif
   /* !subtract one to prevent "squeezing out" the terminal nul! */
   const int bufferSize = sizeof(buffer)/sizeof(buffer[0]) - 1;
   int bufferUsed = 0;
   int bufferLeft = bufferSize - bufferUsed;
   bool bSuccess = true;
   buffer[0] = 0;

   /* Format and print various data: */

   if (bufferLeft > 0)
   {
      int perElementBufferUsed = _snprintf(&buffer[bufferUsed], 
      bufferLeft, "   String: %s\n", s ); // C4996
      // Note: _snprintf is deprecated; consider _snprintf_s instead
      if (bSuccess = (perElementBufferUsed >= 0))
      {
         bufferUsed += perElementBufferUsed;
         bufferLeft -= perElementBufferUsed;
         if (bufferLeft > 0)
         {
            int perElementBufferUsed = _snprintf(&buffer[bufferUsed], 
            bufferLeft, "   Character: %c\n", c ); // C4996
            if (bSuccess = (perElementBufferUsed >= 0))
            {
               bufferUsed += perElementBufferUsed;
               bufferLeft -= perElementBufferUsed;
               if (bufferLeft > 0)
               {
                  int perElementBufferUsed = _snprintf(&buffer
                  [bufferUsed], bufferLeft, "   Integer: %d\n", i ); // C4996
                  if (bSuccess = (perElementBufferUsed >= 0))
                  {
                     bufferUsed += perElementBufferUsed;
                     bufferLeft -= perElementBufferUsed;
                     if (bufferLeft > 0)
                     {
                        int perElementBufferUsed = _snprintf(&buffer
                        [bufferUsed], bufferLeft, "   Real: %f\n", fp ); // C4996
                        if (bSuccess = (perElementBufferUsed >= 0))
                        {
                           bufferUsed += perElementBufferUsed;
                        }
                     }
                  }
               }
            }
         }
      }
   }

   if (!bSuccess)
   {
      printf("%s\n", "failure");
   }
   else
   {
      /* !store nul because _snprintf doesn't necessarily (if the string 
       * fits without the terminal nul, but not with it)!
       * bufferUsed might be as large as bufferSize, which normally is 
       * like going one element beyond a buffer, but in this case 
       * subtracted one from bufferSize, so we're ok.
       */
      buffer[bufferUsed] = 0;
      printf( "Output:\n%s\ncharacter count = %d\n", buffer, bufferUsed );
   }
   return EXIT_SUCCESS;
}
  

.NET Framework-Entsprechung

Nicht zutreffend. Um die Standard-C-Funktion aufrufen, verwenden Sie PInvoke. Weitere Informationen finden Sie unter Plattformaufruf-Beispiele.

Siehe auch

Referenz

Stream E/A

sprintf, _sprintf_l, swprintf, _swprintf_l, __swprintf_l

fprintf, _fprintf_l, fwprintf, _fwprintf_l

printf, _printf_l, wprintf, _wprintf_l

scanf, _scanf_l, wscanf, _wscanf_l

sscanf, _sscanf_l, swscanf, _swscanf_l

vprintf Funktionen