Esistono numerose funzioni Win32 che prendono l'indirizzo di un buffer, ad esempio TCHAR[256]
e scrivono alcuni dati su quel buffer. Potrebbe essere inferiore alla dimensione del buffer o potrebbe essere l'intero buffer.Come mescolare std :: string con le funzioni Win32 che accettano i buffer char []?
Spesso si chiama questo in un ciclo, ad esempio per leggere i dati da un flusso o un tubo. Alla fine vorrei restituire in modo efficiente una stringa che ha i dati completi di tutte le chiamate iterate per recuperare questi dati. Stavo pensando di usare std::string
poiché + = è ottimizzato in modo simile ai metodi StringBuffer.append()
/StringBuilder.Append()
di Java o C#, favorendo la velocità anziché la memoria.
Ma non sono sicuro del modo migliore per combinare lo std::string
con le funzioni Win32, poiché queste funzioni richiedono il char[]
per iniziare. Eventuali suggerimenti?
Si noti inoltre che TCHAR cambierà in base al valore della macro UNICODE. Se UNICODE è definito, le stringhe saranno wchar_t * e dovresti invece usare std :: wstring. –
scrivere direttamente su un buffer interno 'std :: string' può essere pericoloso, poiché la stringa memorizza anche cose come la lunghezza che potrebbe non essere valida se si esegue questa operazione. –
Idan è corretto. Non utilizzare std :: string per una funzione che scriverà nel buffer delle stringhe. – jmucchiello