argc and argv

U

userfriendly

Hi, I know its possible to get argv and argc easily when your commands
are typed in (cin), but how do you get the values for argv and argc
when you are reading them from a file, each line of the file being a
command for running a program. I am trying to do it using getline,
but it doesnt work correclty. here is some code. thank you.

while (!infile.eof())
{
int i = 1;
argc = 0;
infile.getline(process,sizeof(process));

p1 = strtok(process, " ");
argv[0] = p1;

I then run the tokenizer in a loop to fill in the rest of argv, but it
doesnt work correctly if there is a space in the directory name before
the args.
Eg. it will for for something like this:
c:\temp\notepad.exe /w test.txt

but not for this:
c:\temp 2\notepad.exe

any help is appreciated.
 
J

John Harrison

userfriendly said:
Hi, I know its possible to get argv and argc easily when your commands
are typed in (cin), but how do you get the values for argv and argc
when you are reading them from a file, each line of the file being a
command for running a program. I am trying to do it using getline,
but it doesnt work correclty. here is some code. thank you.

while (!infile.eof())
{
int i = 1;
argc = 0;
infile.getline(process,sizeof(process));

p1 = strtok(process, " ");
argv[0] = p1;

I then run the tokenizer in a loop to fill in the rest of argv, but it
doesnt work correctly if there is a space in the directory name before
the args.
Eg. it will for for something like this:
c:\temp\notepad.exe /w test.txt

but not for this:
c:\temp 2\notepad.exe

any help is appreciated.

Quite apart from the code errors, what you are trying cannot easily work.

c:\temp 2\notepad.exe

You say the program is called notepad.exe and is in the "c:\temp 2"
directory. But it could just as easily be that the program is called temp
and is in the "c:\" directory. What you have is just ambiguous, there is no
easy way to tell the difference between a space that separates two argv
entries and a space that is in a file name.

Normally this is handled in Windows by using quotes.

"c:\temp 2\notepad.exe" /w test.txt

But now the parsing is more complicated and your simple approach using
strtok doesn't work.

john
 
C

Chris Mantoulidis

Hi, I know its possible to get argv and argc easily when your commands
are typed in (cin), but how do you get the values for argv and argc
when you are reading them from a file, each line of the file being a
command for running a program. I am trying to do it using getline,
but it doesnt work correclty. here is some code. thank you.

while (!infile.eof())
{
int i = 1;
argc = 0;
infile.getline(process,sizeof(process));

p1 = strtok(process, " ");
argv[0] = p1;

I then run the tokenizer in a loop to fill in the rest of argv, but it
doesnt work correctly if there is a space in the directory name before
the args.
Eg. it will for for something like this:
c:\temp\notepad.exe /w test.txt

but not for this:
c:\temp 2\notepad.exe

any help is appreciated.

that's not a C++ issue. It's a DOS issue. Dos thinks that there should
be no file names with spaces... So to solve you problem do

"C:\temp 2\notepad.exe"

instead of

C:\temp 2\notepad.exe

:)
 
B

Buster

userfriendly said:
while (!infile.eof())

That's not how you write an istream input loop. You will process the
final line twice. See the FAQ for an explanation.

Regards,
Buster.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,769
Messages
2,569,582
Members
45,057
Latest member
KetoBeezACVGummies

Latest Threads

Top