I have a non-unicode (MBCS) C++ project building with VS2013.
Given a BSTR value, how should I pass this to printf safely?
A BSTR really is a WCHAR* with preceding length information. You can ignore that length part for printing purposes. So:
BSTR str = foo();
printf("%S", str); // Capital S
A BSTR is a pointer to a length-prefixed (at offset -4) and 0-terminated wide-character string. You can pass it to any function that is capable of handling a 0-terminated wide-character string. (The actual string starts at offset 0.)
If the target function cannot handle wide characters, then you need to convert the string to multibyte characters (this is the case if you want to use standard printf where the S type field character is not available). This (already commented) link provides information about that: Convert BSTR to char*
@MSalters' answer has the code example (don't want to duplicate 2 trivial lines): https://stackoverflow.com/a/32482688/682404
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With