Article View: pl.comp.lang.c
Article #288Uwaga: blad w funkcji isdigit .
From: Karol Wojtiuk
Date: Thu, 13 Nov 1997 19:46
Date: Thu, 13 Nov 1997 19:46
29 lines
1781 bytes
1781 bytes
Witam wszystkich funkcja isdigit jest zadeklarowana następująco: int isdigit(int c); i ma ona za zadanie sprawdzać czy dane c jest znakiem z przedzialu '0' - '9'. Nie wiem jak wyglądają implementacje w innych bibliotekach ale w dostarczanej przez Microsoft isdigit operuje na tablicy _ctype[257]. Jak widać z rozmiaru tablicy można sprawdzić tylko 257 wartości i jeżeli zmienna c przyjmie wartość ujemną (co może być bardzo częste gdy używamy jako parametru wartości typu char ze znakiem) lub przyjmie wartość powyżej 256 to program nam się wywala. Rozumiem, że ze względu na dużą szybkość przyjęto taki sposób implementacji ale po pierwsze należało sporządzić inną deklarację funkcji (parametr typu int mówi wyraźnie, że możemy używać wartości parametru w o wiele większym zakresie niż tylko od 0 do 256) i po drugie można było zaznaczyć w opisie funkcji, że akceptuje ona tylko wartości od 0 do 256. Co o tym sądzicie? A może ja jestem w błędzie? Czy zauważyliście inne kwiatki? Pozdrowienia Karol Wojtiuk PS. Powyższe prawdopodobnie tyczy się wszystkich funkcji is..., ale jeszcze tego nie sprawdzałem.
Technical Details
Message-ID:
<64flfj$jds$1@sunsite.icm.edu.pl>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!pingwin.icm.edu.pl!mat.uni.torun.pl!news.man.torun.pl!news.icm.edu.pl!not-for-mailShow Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!pingwin.icm.edu.pl!mat.uni.torun.pl!news.man.torun.pl!news.icm.edu.pl!not-for-mail From: "Karol Wojtiuk" <karol@tebo.chelm.pl> Newsgroups: pl.comp.lang.c Subject: Uwaga: blad w funkcji isdigit . Date: Thu, 13 Nov 1997 20:46:40 +0100 Organization: ICM Lines: 31 Message-ID: <64flfj$jds$1@sunsite.icm.edu.pl> NNTP-Posting-Host: guru.tebo.chelm.pl X-Newsreader: Microsoft Outlook Express 4.71.1712.3 X-MimeOLE: Produced By Microsoft MimeOLE V4.71.1712.3 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit