Funzione StringCbCopyNA (strsafe.h)
Copia il numero specificato di byte da una stringa a un'altra. Le dimensioni del buffer di destinazione vengono fornite alla funzione per assicurarsi che non venga scritto oltre la fine del buffer.
StringCbCopyN è una sostituzione delle funzioni seguenti:
Sintassi
STRSAFEAPI StringCbCopyNA(
[out] STRSAFE_LPSTR pszDest,
[in] size_t cbDest,
[in] STRSAFE_PCNZCH pszSrc,
[in] size_t cbToCopy
);
Parametri
[out] pszDest
Tipo: LPTSTR
Buffer di destinazione, che riceve i caratteri copiati.
[in] cbDest
Tipo: size_t
Dimensioni di pszDest, in byte. Questo valore deve essere abbastanza grande per contenere i byte copiati (le dimensioni di pszSrc o il valore di cbSrc, che tuttavia è più piccolo) e tenere conto anche del carattere Null terminante. Il numero massimo di caratteri consentiti è STRSAFE_MAX_CCH * sizeof(TCHAR)
.
[in] pszSrc
Tipo: LPCTSTR
Stringa di origine. Questa stringa deve essere terminata con null.
[in] cbToCopy
Tipo: size_t
Numero massimo di byte da copiare da pszSrc a pszDest.
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 |
---|---|
|
I dati di origine sono stati presenti, i dati sono stati copiati da pszSrc senza troncamento e il buffer di destinazione risultante è null-terminato. |
|
Il valore in cbDest è maggiore di STRSAFE_MAX_CCH * sizeof(TCHAR) o il buffer di destinazione è già pieno.
|
|
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
StringCbCopyN 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. StringCbCopyN termina sempre null e non esegue mai il overflow di un buffer di destinazione valido, anche se il contenuto della stringa di origine cambia durante l'operazione.
Anche se questa routine è destinata alla sostituzione di strncpy, esistono differenze nel comportamento. Se cbSrc è maggiore del numero di byte in pszSrc, StringCbCopyN, a differenza di strncpy, non continua a eseguire il pad pszDest con caratteri Null finché non vengono copiati i byte cbSrc .
Il comportamento non è definito se le stringhe puntate da pszSrc e pszDest sovrapposte.
Né pszSrc né pszDest devono essere NULL. Vedere StringCbCopyNEx se si richiede la gestione dei valori del puntatore di stringa Null.
StringCbCopyN può essere usato nel formato generico o nelle forme più specifiche. Il tipo di dati della stringa determina la forma di questa funzione da usare, come illustrato nella tabella seguente.
Tipo di dati String | Stringhe letterali | Funzione |
---|---|---|
char | "stringa" | StringCbCopyNA |
TCHAR | TEXT("string") | StringCbCopyN |
WCHAR | L"string" | StringCbCopyNW |
Nota
L'intestazione strsafe.h definisce StringCbCopyN 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
Requisito | Valore |
---|---|
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