Funzione StringCbPrintfA (strsafe.h)
Scrive i dati formattati nella stringa specificata. Le dimensioni del buffer di destinazione vengono fornite alla funzione per assicurarsi che non venga scritto oltre la fine del buffer.
StringCbPrintf è una sostituzione delle funzioni seguenti:
Sintassi
STRSAFEAPI StringCbPrintfA(
[out] STRSAFE_LPSTR pszDest,
[in] size_t cbDest,
[in] STRSAFE_LPCSTR pszFormat,
...
);
Parametri
[out] pszDest
Tipo: LPSTR
Buffer di destinazione, che riceve la stringa formattata e con terminazione null creata da pszFormat e dai relativi argomenti.
[in] cbDest
Tipo: size_t
Dimensioni del buffer di destinazione, in byte. Questo valore deve essere sufficientemente grande per contenere la stringa formattata finale e il carattere null terminante. Il numero massimo di byte consentiti è STRSAFE_MAX_CCH * sizeof(TCHAR)
.
[in] pszFormat
Tipo: LPCSTR
Stringa di formato. Questa stringa deve essere terminata con null. Per altre informazioni, vedere Sintassi della specifica del formato.
...
Argomenti da inserire nella stringa pszFormat .
Valore restituito
Tipo: HRESULT
Questa funzione può restituire uno dei valori seguenti. È consigliabile usare le macro SUCCESSED e FAILED per testare il valore restituito di questa funzione.
Codice restituito | Descrizione |
---|---|
|
C'era spazio sufficiente per il risultato da copiare in pszDest senza troncamento e il buffer è null-terminato. |
|
Il valore in cbDest è 0 o maggiore di STRSAFE_MAX_CCH * sizeof(TCHAR) .
|
|
L'operazione di copia non è riuscita a causa di spazio buffer insufficiente. Il buffer di destinazione contiene una versione troncata e terminata null del risultato previsto. In situazioni in cui il troncamento è accettabile, questo potrebbe non essere necessariamente considerato come una condizione di errore. |
Si noti che questa funzione restituisce un valore HRESULT , a differenza delle funzioni sostituite.
Commenti
Rispetto alle funzioni sostituite, StringCbPrintf offre un'elaborazione aggiuntiva per la gestione corretta del buffer nel codice. La gestione del buffer insufficiente è implicata in molti problemi di sicurezza che comportano l'overrun del buffer. StringCbPrintf termina sempre null-termina un buffer di destinazione diverso da zero.
Il comportamento non è definito se le stringhe puntate da pszDest, pszFormat o qualsiasi stringa di argomento si sovrappone.
Né pszFormat né pszDest devono essere NULL. Vedere StringCbPrintfEx se è necessaria la gestione dei valori del puntatore di stringa Null.
StringCbPrintf può essere usato nel formato generico o nelle relative forme più specifiche. Il tipo di dati della stringa determina la forma di questa funzione da usare.
Tipo di dati String | Stringhe letterali | Funzione |
---|---|---|
char | "stringa" | StringCbPrintfA |
TCHAR | TEXT("string") | StringCbPrintf |
WCHAR | L"string" | StringCbPrintfW |
Esempio
Nell'esempio seguente viene illustrato un uso di base di StringCbPrintf usando quattro argomenti.
int const arraysize = 30;
TCHAR pszDest[arraysize];
size_t cbDest = arraysize * sizeof(TCHAR);
LPCTSTR pszFormat = TEXT("%s %d + %d = %d.");
TCHAR* pszTxt = TEXT("The answer is");
HRESULT hr = StringCbPrintf(pszDest, cbDest, pszFormat, pszTxt, 1, 2, 3);
// The resultant string at pszDest is "The answer is 1 + 2 = 3."
Nota
L'intestazione strsafe.h definisce StringCbPrintf come alias che seleziona automaticamente la versione ANSI o Unicode di questa funzione in base alla definizione della costante preprocessore UNICODE. La combinazione dell'utilizzo dell'alias di codifica neutrale con il codice che non è neutrale dalla codifica può causare errori di corrispondenza che causano errori di compilazione o runtime. Per altre informazioni, vedere Convenzioni per i prototipi di funzione.
Requisiti
Client minimo supportato | Windows XP con SP2 [app desktop | App UWP] |
Server minimo supportato | Windows Server 2003 con SP1 [app desktop | App UWP] |
Piattaforma di destinazione | Windows |
Intestazione | strsafe.h |
Vedi anche
Riferimento