Liste des Groupes | Revenir à cl c |
Michael S <already5chosen@yahoo.com> writes:
On Fri, 21 Jun 2024 18:15:07 +0100
Ben Bacarisse <ben@bsb.me.uk> wrote:
Michael S <already5chosen@yahoo.com> writes:>
On Fri, 21 Jun 2024 18:28:39 +0300
Michael S <already5chosen@yahoo.com> wrote:
On Fri, 21 Jun 2024 13:58:01 -0000 (UTC)>
gazelle@shell.xmission.com (Kenny McCormack) wrote:
Yeah, now I get it. You really only need strtoimax() and
strtoumax().
Which are? uunfortunately, not part of C standard.
A result of any smaller type can be obtained by calling one of
these functions and storing the result in an object of the
smaller type.
Or check for range and handle out of range values as
appropriate by situation.
BTW, I don't know what The Standard says about out-of-range
inputs, but at least
https://en.cppreference.com/w/c/string/byte/strtol does not say
anything certain. especially about what stored in *str_end.
It says what value should be returned. That's something certain!
In case of strtol, yes.
In case of strtoul it also says what value should be returned, but
plain reading of cppreference.com text (at least *my* plain reading)
does not match observed behaviour. The text on cppreference.com
resembles Standard text, but does not match it.
Ah. What's the discrepancy you see?
Also, at least to me, Standard text itself appear very far from
clear and way too open to interpretations.
My own interpretation would be that for any negative input strtoul()
should return ULONG_MAX and set errno to ERANGE. None of the actual
implementation that I tested behaves in this manner.
I don't get that from the text. There is, after all, no "negative
input". There is a "subject sequence" which, if it starts with a
minus sign, causes the "value resulting from the conversion is
negated (in the return type)" which seems clear enough.
>
It seems, the problem is of what is considered "range of
representable values" for unsigned type is by itself open to
interpretations.
>
IMHO, even if in some part of the standard there exists text that
clearly states that "range of representable values for unsigned
long = [-ULONG_MAX:ULONG_MAX]" it is worth repeating that in the
section that defines strtol, because it is at all non-intuitive.
I don't get what you are saying here. The range of values is
[0:ULONG_MAX].
>
Les messages affichés proviennent d'usenet.