AutoCAD 2018: Unexpected Behavior Dealing with wchar_t

<?xml encoding=”UTF-8″>By Madhukar Moogala

Recently I had a request from an ADN partner troubleshooting a problem with reading values from a text file.

Assume we have a text file with following contents

Helloworld|Autodesk.

And, user would like to split string with pipe delimitation, so expected output would be

Helloworld and Autodesk.

<span>#</span><span>define</span><span> wprintf acutPrintf</span>
<span>void</span> readFile<span>(</span><span>)</span>
<span>{</span>
<span>const</span> <span>wchar_t</span>  textFile<span>[</span><span>]</span> <span>=</span> _T<span>(</span><span>"</span><span>C:</span><span>\</span><span>Temp</span><span>\</span><span>TFile</span><span>\</span><span>helloworld.txt</span><span>"</span><span>)</span><span>;</span>
<span>FILE</span> <span>*</span> pFile <span>=</span> <span>NULL</span><span>;</span>
<span>wchar_t</span> f1<span>[</span><span>20</span><span>]</span><span>,</span> f2<span>[</span><span>20</span><span>]</span><span>;</span>
f1<span>[</span><span>0</span><span>]</span> <span>=</span> <span>''</span><span>;</span> f2<span>[</span><span>0</span><span>]</span> <span>=</span> <span>''</span><span>;</span>
<span>if</span> <span>(</span><span>_wfopen_s</span><span>(</span><span>&</span>pFile<span>,</span> textFile<span>,</span> <span>L"</span><span>r</span><span>"</span><span>)</span> <span>!</span><span>=</span> <span>0</span> <span>&</span><span>&</span> pFile <span>!</span><span>=</span> <span>NULL</span><span>)</span>
<span>{</span>
<span>wprintf</span><span>(</span><span>L"</span><span>failure opening file </span><span>%s</span><span> !</span><span>n</span><span>"</span><span>,</span> textFile<span>)</span><span>;</span>
<span>return</span><span>;</span>
<span>}</span>
<span>/*</span>
<span>       %[^|] = store everything before '|' in place holder</span>
<span></span>
<span>       */</span>
<span>while</span> <span>(</span><span>fwscanf</span><span>(</span>pFile<span>,</span> <span>L"</span><span>%[^|]|</span><span>%s</span><span>n</span><span>"</span><span>,</span> f1<span>,</span> f2<span>)</span> <span>!</span><span>=</span> <span>EOF</span><span>)</span>
<span>{</span>
<span>wprintf</span><span>(</span><span>L"</span><span>I have read f1 as : </span><span>%s</span><span>  </span><span>n</span><span>"</span><span>,</span> f1<span>)</span><span>;</span>
<span>wprintf</span><span>(</span><span>L"</span><span>I have read f2 as : </span><span>%s</span><span>  </span><span>n</span><span>"</span><span>,</span> f2<span>)</span><span>;</span>
<span>}</span>
<span>fclose</span><span>(</span>pFile<span>)</span><span>;</span>
<span>}</span>

This gives garbage values in the placeholders, like shown in below pic

garbageValues

The root cause of this problem lies in the preprocess macro define

_CRT_STDIO_ISO_WIDE_SPECIFIERS
=1

in ObjectARXSDK 2018incrxsdk_common.props

To tackle issue with Visual Studio 2015, AutoCAD made a workaround, it is not a case anymore unfortunately this define lies in SDK and causing some other issues like I stated above.

You can remove this define from your SDK to avoid unnecessary issues while dealing with strings.


Comments

4 responses to “AutoCAD 2018: Unexpected Behavior Dealing with wchar_t”

  1. Hi, Madhukar!
    I’ve checked my ObjectARXSDK 2018\inc\rxsdk_common.props but did not found _CRT_STDIO_ISO_WIDE_SPECIFIERS definition in it. What wrong with my ObjectARX SDK 2018?
    Best Regads,
    Alexander Rivilis

  2. Hi Alexander,
    Is your SDK latest download from website ?.
    Possible that correction might have included.
    Developers who are having SDK from beta days are finding this issue.

  3. Yes! I have ObjectARX SDK 2018 from Autodesk website (not beta). File rxsdk_common.props has such line:
    _WIN32_IE=0x0600;WIN;WIN32;_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES=1;_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES_COUNT=1;_AFXDLL;_UNICODE;UNICODE;%(PreprocessorDefinitions)
    There is no others preprocessor definitions.
    So it is look like best offer – download and install the latest version of the ObjectARX SDK 2018 from Autodesk website: http://usa.autodesk.com/adsk/servlet/item?siteID=123112&id=785550

  4. It’s a wonderful piece. In my opinion, this is one of the best blog posts ever. I admire and am inspired by your work. That’s really kind of you.

Leave a Reply

Discover more from Autodesk Developer Blog

Subscribe now to keep reading and get access to the full archive.

Continue reading