Portál AbcLinuxu, 16. července 2025 05:56


Dotaz: C - Ošetření velikosti int

9.6.2011 10:26 Igor
C - Ošetření velikosti int
Přečteno: 483×
Odpovědět | Admin
Dobrý den, Mám vstupní soubor, z kterého načítám řetězec čísel pomocí fgets(). Ten pak potřebuju pro další zpracování uložit jako celé číslo do proměné int. Vše funguje jak potřebuju, ale nevím jak se vypořádat ze situací, kdy je číselný řetězec delší než kolik se vejde do int. V takovém případě potřebuju vypsat upozornění.

Jak mám zjistit, že daný řetězec je delší než norma int? (navíc jsem se dočetl, že u každého kompilátoru to může být jinak). Kvůli tomu mě napadlo includovat limits.h a pak jsem překlopil řetězec pomocí atoi() a to porovnal s INT_MAX. Ale to nefungovalo korektně. Předpokládám, že když je atoi() dán delší řetězec než se do int vejde, tak už nevrátí korektní výsledek. (možná, že je to celý blbost ale bylo to jediný řešení co mě napadlo)

Děkuju za radu.


Řešení dotazu:


Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

Řešení 1× (----)
9.6.2011 10:50 Petr
Rozbalit Rozbalit vše Re: C - Ošetření velikosti int
Odpovědět | | Sbalit | Link | Blokovat | Admin
Zkuste místo atoi použít strtol(3), tam je kontrola přetečení.
9.6.2011 12:20 Igor
Rozbalit Rozbalit vše Re: C - Ošetření velikosti int
Funguje, děkuju
9.6.2011 15:56 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: C - Ošetření velikosti int
Ale nezapomeňte výsledek stejně ještě otestovat proti INT_MAX, pokud sizeof(int) < sizeof(long).
9.6.2011 16:02 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: C - Ošetření velikosti int
A taky INT_MIN.
To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.