Determine size of argv[x]

J

John Williams

I need a way to determine how many characters are in a command line
argument. Basically the code snippet looks like
int main(int argc, char *argv[])
{
openfiles(argv[1], argv[2], &infile, &outfile);
cipher(&infile, &outfile, argv[3]);
return 0;
}

void cipher(fstream *infile, fstream *outfile, char key[])
{
plain text in
bring in the key
cipher text out
}

Right now the entire program works, because I have it set up to only
accept 8 character keys. I'd like to set it up so that it can determine
at runtime how many characters the key is. Since the key is accepted at
the command line I can't figure out how it's done since sizeof(argv[3])
will always return the sizeof a pointer to a char (4) and
sizeof(*argv[3]) seems to always return the size of a single char (1).
 
R

Rolf Magnus

John said:
I need a way to determine how many characters are in a command line
argument. Basically the code snippet looks like
int main(int argc, char *argv[])
{
openfiles(argv[1], argv[2], &infile, &outfile);
cipher(&infile, &outfile, argv[3]);
return 0;
}

void cipher(fstream *infile, fstream *outfile, char key[])
{
plain text in
bring in the key
cipher text out
}

Right now the entire program works, because I have it set up to only
accept 8 character keys. I'd like to set it up so that it can determine
at runtime how many characters the key is. Since the key is accepted at
the command line I can't figure out how it's done since sizeof(argv[3])
will always return the sizeof a pointer to a char (4) and
sizeof(*argv[3]) seems to always return the size of a single char (1).

try strlen(argv[3]).
 
J

John Williams

Rolf said:
John said:
I need a way to determine how many characters are in a command line
argument. Basically the code snippet looks like
int main(int argc, char *argv[])
{
openfiles(argv[1], argv[2], &infile, &outfile);
cipher(&infile, &outfile, argv[3]);
return 0;
}

void cipher(fstream *infile, fstream *outfile, char key[])
{
plain text in
bring in the key
cipher text out
}

Right now the entire program works, because I have it set up to only
accept 8 character keys. I'd like to set it up so that it can determine
at runtime how many characters the key is. Since the key is accepted at
the command line I can't figure out how it's done since sizeof(argv[3])
will always return the sizeof a pointer to a char (4) and
sizeof(*argv[3]) seems to always return the size of a single char (1).

try strlen(argv[3]).

Perfect thanks
 
J

Juha Nieminen

Rolf said:
try strlen(argv[3]).

Another possibility, which is especially worth considering if you
are not comfortable with handling C-style strings (which are just
char pointers) is to create a vector of std::strings from the
command-line parameters. These will be safer and much easier to
handle than the "raw" argv array.

It's very easy to create a vector of strings in C++ (surprisingly
easy for those who have never thought of it before):

int main(int argc, char* argv[])
{
std::vector<std::string> params(argv, argv+argc);
...
}

Now you can index 'params' for the command-line parameters
('params.size()' will tell you how many there are), and each element
will be an std::string, which is easier and safer to handle than the
char*'s. So, for example, if you want to know the size of the fourth
parameter: params[3].size()
 

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,581
Members
45,057
Latest member
KetoBeezACVGummies

Latest Threads

Top