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