Re: C++ Primer ex 7.16 - arguments to main
arnuld wrote:
On Thu, 16 Aug 2007 07:42:40 -0400, Victor Bazarov wrote:
arnuld wrote:
i am not able to figure out the error:
/* C++ Primer - 4/e
*
* exercise 7.16
* STATEMENT:
* write a programme that accepts the arguments to main. print
* the values passed to main.
*
*/
#include <iostream>
int main( int argc, char **argv )
{
std::cout << "These arguments were passed to 'main()' :\t";
/* an int vale can be printed easily */ std::cout << argc << "\t";
/* to prinit array of strings, we need to consider 2 pointers:
one to the 1st character in string literal presented in the array
and 2nd to the 1st element of the array itself.
to print the string literals we will use pointer to a pointer to
char and to move around in the array we will use a pointer to char.
*/
char *pchar = 0;
'pchar' is a variable name.
pchar **p_string = **argv;
Here you're trying to use 'pchar' as if it is a type. BTW, you don't
really need to assign 'argv' to another variable *unless* you need it
for something else later. Just use 'argv' where you wanted to use
'p_string'.
But, really, why do you need all this pointer arithmetic exposed when
you can just use indexing?
i don't know how to use indexing for an array of arrays,
It's not an array of arrays. It's an array of pointers. When you
index in an array of pointers, you get a pointer, which you can also
index to get the element.
especiall
when the size of inner array is unknown. i do know about pointer,
though not much.
You need to learn more, or so it seems.
i changed the variable definitions to these ones:
typedef char* pchar;
typedef pchar* ppchar;
ppchar p_string = **argv;
Why are you dereferencing 'argv' here? 'argv' has the same type as
'p_string'. If you want to copy its value, just copy its value, do
not trying to copy what 'argv' points to...
pchar p_index = *argv;
Not sure what you need this for.
still no luck
I strongly recommend you against trying to comprehend pointers unless
you really need to. Memorize the idiom:
std::vector<std::string> args(argv, argv + argc);
and use 'args' instead.
Unless you've programmed in Assembly (and understand how addressing
works in the computer), pointers are not an easy concept to grasp,
methinks. The book should be able to explain what a value of the
pointer is, what happens when you write "*ptr", how those operators
chain (and so on). I suspect you either are not paying attention
or the book is not good enough. The latter is more likely. Keep
in mind that if the book is less than really good, you need to be
very attentive trying to understand what it's trying to explain to
you, not just skim the surface.
V
--
Please remove capital 'A's when replying by e-mail
I do not respond to top-posted replies, please don't ask