| Topic: |
DEVELOP > c-Plus-Plus |
| User: |
"" |
| Date: |
29 Oct 2007 10:20:30 PM |
| Object: |
question about atoi |
The following description of atoi is pasted from cplusplus.com. My
question is after the pasting.
***** PASTING BEGINS HERE ******
int atoi ( const char * str ); <cstdlib>
Convert string to integer
Parses the C string str interpreting its content as an integral
number, which is returned as an int value.
The function first discards as many whitespace characters as necessary
until the first non-whitespace character is found. Then, starting from
this character, takes an optional initial plus or minus sign followed
by as many numerical digits as possible, and interprets them as a
numerical value.
The string can contain additional characters after those that form the
integral number, which are ignored and have no effect on the behavior
of this function.
If the first sequence of non-whitespace characters in str is not a
valid integral number, or if no such sequence exists because either
str is empty or it contains only whitespace characters, no conversion
is performed.
Parameters
str
C string beginning with the representation of an integral number.
Return Value
On success, the function returns the converted integral number as an
int value.
If no valid conversion could be performed, a zero value is returned.
If the correct value is out of the range of representable values,
INT_MAX or INT_MIN is returned.
**** PASTING ENDS HERE ***************
I don't know whether I'm missing something but this function seems to
have a serious flaw. If the value returned is 0, it seems that the
user can't know if this means no valid conversion or this means the
string begins with "0".
Any comments?
Paul Epstein
.
|
|
| User: "Ian Collins" |
|
| Title: Re: question about atoi |
30 Oct 2007 01:22:34 AM |
|
|
wrote:
<snippage>
I don't know whether I'm missing something but this function seems to
have a serious flaw. If the value returned is 0, it seems that the
user can't know if this means no valid conversion or this means the
string begins with "0".
Any comments?
Yes, don't use atoi() unless you know for certain the argument will be
in range. Otherwise, use strtol().
--
Ian Collins.
.
|
|
|
|
| User: "James Kanze" |
|
| Title: Re: question about atoi |
31 Oct 2007 05:55:46 AM |
|
|
On Oct 31, 3:57 am, Jack Klein <jackkl...@spamcop.net> wrote:
[...[
That means that atoi() is not required, and most likely does not,
return INT_MAX or INT_MIN if the value is out of range, instead the
result is undefined behavior.
It's not required to, but as a QoI issue, I certainly would
expect it to. Both VC++ and the libc bundled with Linux do
behave well; I suspect that it is only very old libc bundled
with some traditional Unix which cause problems.
Of course, I'd still recommend something more robust, based on
strtol, but if you have an implementation of reasonable quality,
atoi should work as well.
--
James Kanze (GABI Software) email:james.kanze@gmail.com
Conseils en informatique orient=E9e objet/
Beratung in objektorientierter Datenverarbeitung
9 place S=E9mard, 78210 St.-Cyr-l'=C9cole, France, +33 (0)1 30 23 00 34
.
|
|
|
|

|
Related Articles |
|
|