How to pass BSTR to printf?

10,742

Solution 1

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

Solution 2

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

Share:
10,742
Mr. Boy
Author by

Mr. Boy

SOreadytohelp

Updated on June 13, 2022

Comments

  • Mr. Boy
    Mr. Boy almost 2 years

    I have a non-unicode (MBCS) C++ project building with VS2013.

    Given a BSTR value, how should I pass this to printf safely?