<?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
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.


Leave a Reply