This is the mail archive of the cygwin mailing list for the Cygwin project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: commanline argument parsing


Haojun Bao wrote:
grischka <gr1008@googlemail.com> writes:

If I compile this snippet:

#include <stdio.h>
int main (int argc, char **argv)
{
    int i;
    for (i = 0; i < argc; ++i)
        printf("argv[%d] %s\n", i, argv[i]);
    return 0;
}

with cygwin GCC and then run it from CMD prompt:

C:\cygwin\home\me> test \"stuff\"

it prints this:

    argv[0] test
    argv[1] \stuff"

Is that expected?  I'm aware that there is some conversion going on
and that it's meant to work from a cygwin shell really, but still.

Yes, it's expected. The 1st `\' is not special to windows, so it get printed, the 1st `"' start a quote and it's removed, the 2nd `\' is in a quoted string, so it's removed but the 2nd `"' following it gets printed. And you didn't end your quoted string properly.

Indeed, it looks like that \ can escape " within "..." but not outside.

That is per se logical, just that such logic doesn't seem to exist
neither in windows nor in posix.  So I still wonder how it comes
into play.

You can also try test "x""y", it should print `argv[1] x"y'

That looks more familiar like if it came from windows.


Then again, cygwin also parses "x:y""z" into x:y\z.  Hm.  Is this
now because me didn't quote properly or is it an artifact from the
posix/windows mix or is it something clever, under circumstances?

--- gr

--
Problem reports:       http://cygwin.com/problems.html
FAQ:                   http://cygwin.com/faq/
Documentation:         http://cygwin.com/docs.html
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]