Następujący program C++ wywołuje strtoul
z wyniku ujemnego 1. Ponieważ nie można podać żadnych liczb ujemnych w żadnym typie bez znaku, oczekiwałem, że to się nie powiedzie i zwróci 0 (If no valid conversion could be performed, a zero value is returned.), ale zamiast tego duża liczba dodatnia jest zwracana (If the value read is out of the range of representable values by an unsigned long int, the function returns ULONG_MAX
(defined in <climits>
), and errno
is set to ERANGE
.).C/C++ strtoul o numerze ujemnym
#include <cstdlib>
#include <iostream>
int main() {
{char s[] = "-1";
for (int b=0; b<17; ++b)
std::cout << "strtoul (unsigned) of " << s
<< " with base arg " << b
<< ": " << strtoul(s,0,b) << std::endl;}
}
Dlaczego strtoul nie zawiedzie i zwraca 0 dla liczb ujemnych?
Jaki jest Twój system operacyjny? Kompilator? Środowisko wykonawcze C/C++? –
@AndrewHenle. Nieistotne w tym przypadku. Funkcja demonstruje prawidłowe zachowanie. –
@ Galik. Nie prawda. To tylko ** zwraca ** niepodpisane liczby. –