Possible bug in std.path?
Mike Parker via Digitalmars-d
digitalmars-d at puremagic.com
Sun Jun 19 22:44:53 PDT 2016
On Monday, 20 June 2016 at 05:11:12 UTC, Hugo wrote:
> On Sunday, 19 June 2016 at 23:01:26 UTC, Adam D. Ruppe wrote:
>> One potentially simple option would be to preprocess it by
>> doing a .replace(`\"`, `\\"`) then pass to CommandLineToArgvW
>> to hack in the extra slash...
>
> The problem with that approach is that replace does not work
> with wchar*. I might convert it to string, replace and then
> typecast as wchar* again because that's what CommandLineToArgvW
> expects, but when I try to convert the output to strings again,
> all I get are memory addresses instead. It seems something is
> lost during conversion or typecast.
FWIW, it seems there's some problem with print wchar* or strings
converted from wchar*. With these lines:
auto cmdLine = GetCommandLineW();
auto str = to!string(cmdLine);
writeln(str);
Whether I use to!string or to!wstring, whether I print str or
cmdLine, all I get are addresses. However, replacing
GetCommandLineW with GetCommandLineA yields the correct result
(my test is compiled as slash.exe):
Command: slash "foo\"
Output: slash "foo\"
It shouldn't hurt to use the A variant, as Windows will do the
necessary conversions under the hood. However, I'd love to know
what the problem is with converting wchar* to a string type. This
also prints an address:
auto foo = "I'm a wstring"w.ptr;
writeln(to!wstring(foo));
More information about the Digitalmars-d
mailing list