On Wed, Jan 31, 2001 at 03:30:57PM -0200, Flavio Ribeiro wrote:
> b. The easy way: run strtof() on the string and see if it returns 0. If it
> does, the user either entered '0' or entered something illegal. Read
> strtof's man page for more ideas.

        % man strtof
        No manual entry for strtof
        % uname -sr
        FreeBSD 3.4-RELEASE

On the other hand:

        % man strtod

                ...

        RETURN VALUES
             The strtod() function returns the converted value, if any.

             If "endptr" is not NULL, a pointer to the character after the
             last character used in the conversion is stored in the location
             referenced by "endptr".

             If no conversion is performed, zero is returned and the value of
             "nptr" is stored in the location referenced by "endptr".

             If the correct value would cause overflow, plus or minus
             HUGE_VAL is returned (according to the sign of the value), and
             ERANGE is stored in "errno".  If the correct value would cause
             underflow, zero is returned and ERANGE is stored in "errno".

                ...

        STANDARDS
             The strtod() function conforms to ISO 9899: 1990 (``ISO C'').

so perhaps "strtod()" would be a better alternative, depending on the
platforms on which the application is to be supported (i.e., "strtod()"
is in the version of the C standard supported by most platforms; "strtof()",
as far as I know, isn't, even if it happens to be in GNU libc, or in C99).

Note also that if you hand "strtod()" the string "6.02e23qqqq", it will
return 6.02e+23, not 0.0 - i.e., it doesn't treat extra characters at
the end of the string as an error (presumably because the intent is that
it can be used to carve numeric tokens out of a string).

The way I generally check for errors in "strtol()" is:

        char *p;

                ...

        val = strtol(string, &p, base);
        if (p == string || *p != '\0')
                error;

as that checks either for

        1) "strtol()" not liking the input at all (in which case the
           pointer to the first character after the number points to the
           beginning of the string)

or

        2) extra stuff after the number

and, for "strtod()", a similar scheme can be used:

        char *p;
        val = strtod(string, &p);
        if (p == string || *p != '\0')
                error;

_______________________________________________
gtk-list mailing list
[EMAIL PROTECTED]
http://mail.gnome.org/mailman/listinfo/gtk-list

Reply via email to