Path: utzoo!utgpu!jarvis.csri.toronto.edu!rutgers!uwm.edu!ogicse!emory!hubcap!kaires From: kaires@hubcap.clemson.edu (Robert G Kaires) Newsgroups: comp.lang.c Subject: an elementary question concerning double indirection Keywords: double indirection, strtod Message-ID: <8146@hubcap.clemson.edu> Date: 25 Feb 90 05:07:37 GMT Organization: Clemson University, Clemson, SC Lines: 53 Dear C users: Thanks to all who answered my question entitled "A very elementary question concerning indirection". Your answers were most helpful (and plentiful). Sorry I could answer each response individually. This next question is maybe not so elementary (hence I left off the "very"). I am trying to write a code fragment which gets a floating point number from the user and checks to see if it contains any illegal characters. The atof() function can change the input string to a floating point number and stops converting at the first illegal character. Searching through my Turbo C manual (2.0), I find the function strtod() which seems to be better suited for my purpose. This function not only stops at the first illegal character but also returns a pointer (or is it a pointer to a pointer?). I don't really understand why this function has the syntax: double strtod(const char *s, char **endptr); Why is endptr a pointer to a pointer (and not just a pointer)? Unfortunately the description of double indirection is poorly explained in my manuals, and no description of how to use this function is given. However, I plunged ahead and tried to use it anyway. Here is my short program: #include #include #include #include main() { char string[30]={""}; char **ptr; double ans; clrscr(); while(1) { gets(string); if (*string == 'q') break; ans=strtod(string,ptr); if ( ( string+strlen(string) ) != *ptr ) /* <--- warning here */ printf("format error\n"); else printf("You typed the number: %f\n",ans); } } This program seems to work OK (try it). However I do get warnings on the line indicated that "I am trying to use ptr before it is defined". Even worst, when I use this fragment in a much larger program, all hell breaks loose. It seems that I am writing over sections of memory that belong to other varaiables. Please tell me what is wrong (without too much scolding PLEASE, I am still a beginner). Thanks one and all. Bob Kaires