Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

simple test of main signature fails

0 views
Skip to first unread message

Comp...@yahoo.co.uk

unread,
Apr 1, 2009, 10:38:22 AM4/1/09
to
On Visual Studio 2008 Express, I compiled and ran the following
program:

#include "stdafx.h"
#include <iostream>


int main(int argc, char * argv[])
{
std::cout << argc;

}

At the Visual Studio Command Prompt, I entered ProjectName.exe(3, "a",
"b", "c")

My thinking was that argc denotes the number of string arguments to
the main function. This is indicated by the 3 strings "a", "b" and
"c" and by the first integer parameter which I set to 3.
So I expected that argc==3 and that therefore the output would be 3.
However, the output was 2

I'd be grateful if someone could explain this.

Thanks in advance.

Victor Bazarov

unread,
Apr 1, 2009, 11:02:31 AM4/1/09
to
Comp...@yahoo.co.uk wrote:
> On Visual Studio 2008 Express, I compiled and ran the following
> program:
>
> #include "stdafx.h"
> #include <iostream>
>
>
> int main(int argc, char * argv[])
> {
> std::cout << argc;

Why not go the extra step and also do

for (int i = 0; i < argc; ++i)
std::cout << argv[i] << std::endl;

It would help you see what you get...

>
> }
>
> At the Visual Studio Command Prompt, I entered ProjectName.exe(3, "a",
> "b", "c")
>
> My thinking was that argc denotes the number of string arguments to
> the main function. This is indicated by the 3 strings "a", "b" and
> "c" and by the first integer parameter which I set to 3.
> So I expected that argc==3 and that therefore the output would be 3.
> However, the output was 2
>
> I'd be grateful if someone could explain this.

The arguments to 'main' are supplied by the execution environment in the
system- and implementation-specific manner. How you are supposed to
supply the arguments to the execution environment when you make your
program run is also system-specific. Try

ProjectName.exe a b c

(the command processor in DOS/Windows collects the strings from the
line, along with the program name, and puts them in the array which it
passes then to the program). You should see 4 as the output since there
are four independent strings (spaces are delimiters) in the command
line. Also try

ProjectName.exe "a b c"

which should give you 2, but the quotes will be removed from the second
argument and the spaces will become part of the argument string.

Experiment!

Good luck!

V
--
Please remove capital 'A's when replying by e-mail
I do not respond to top-posted replies, please don't ask

red floyd

unread,
Apr 2, 2009, 2:41:40 AM4/2/09
to
Comp...@yahoo.co.uk wrote:
> On Visual Studio 2008 Express, I compiled and ran the following
> program:
>
> #include "stdafx.h"
> #include <iostream>
>
>
> int main(int argc, char * argv[])
> {
> std::cout << argc;
>
> }
>
> At the Visual Studio Command Prompt, I entered ProjectName.exe(3, "a",
> "b", "c")
>
>

Why do you think you need the parens? Does any other progra need parens
like that?

0 new messages