Article View: pl.comp.lang.c
Article #293Re: Uwaga: blad w funkcji isdigit .
From: Karol Wojtiuk
Date: Fri, 14 Nov 1997 16:12
Date: Fri, 14 Nov 1997 16:12
71 lines
3566 bytes
3566 bytes
Marek Kotowski wrote in message <346C70EB.6EE9@imm.org.pl>... >Karol Wojtiuk wrote: >> Blad w isdigit jest poniewaz w opisie tej funkcji jak i w header'ach >> bibliotek nie jest zaznaczone, ze mozna operowac tylko na wartosciach od -1 >> do 255, a deklaracja funkcji mowi jasno o dopuszczalnosci argumentu z >> zakresu int. > > Calkowite nieporozumienie. Wartosci znakow nigdy nie beda zaznaczone, >albowiem standard nie mowi nic o wartosciach kodow. Nawet wartosc EOF >jakkolwiek tradycyjnie ujemna, formalnie moze byc takze dodatnia. >Definicja isdigit mowi tylko, ze zwraca ona wartosc rozna od zera, >jesli dany znak (konwertowany do int) jest '0' - '9' oraz wartosc >rowna zeru w przeciwnym wypadku. To, jakie sa wartosci kodow znakow >'0'-'9', to sprawa zupelnie inna i zalezna calkowicie od implementacji. >Wszystko. > Zgadzam sie ze jest to nieporozumienie ale ze strony implementujacego funkcje isdigit. Jak widac z powyzszego podajac jako argument wartosc 258 lub -2 powinienem otrzymac zero, a otrzymuje wywalenie programu. >> Na koniec warto dodac, ze to wszystko dotyczy tylko funkcji bibliotecznych >> Microsoft. > >Niewykluczone, ze implementacja isdigit jest bledna, chociaz prawde >rzeklszy >musialbym sam zobaczyc, by uwierzyc. Napisalem duzo kodu z >wykorzystaniem >isdigit, i w BC, i w MSC, i w GNU, i nigdy z ta funkcja nie bylo >problemu. > >> Slon przyslal mi opis tych funkcji w UNIX SVR4 gdzie jasno jest opisane, ze >> operuja one >> tylko i wylacznie na 7-mio bitowym kodzie ASCII, czego u Microsofta prozno >> szukac. > >I bardzo dobrze. Funkcja isdigit jest funkcja standardowa. A w >standardzie >nie ma nic o kodzie ASCII, ani np. EBCDIC. Powiem nawet wiecej: zgodnie >ze >standardem znak moze byc kodowany takze na wiekszej liczbie bitow, 9, >12, czy 16. > I jeszcze jedno: dzialanie funkcji isdigit moze byc uzaleznione od >biezacej wersji jezykowej, ustawianej za pomoca standardowej funkcji >setlocale. Z tego, co Pan napisal, mogloby wynikac, ze w UNIX SVR4 >jest to niedopuszczalne (wersje jezykowe inne niz "amerykanski" >angielski >wymagaja wiecej niz 7 bitow na znak. Tym samym w UNIX SVR4 (kompilator?) >takich wersji nie mozna by deklarowac. > Napisalem tylko skrotowo, bo chodzilo mi o blad gdy setlocale jest ustawione na wersje "amerykanska". Prawdopodobnie tak u Microsofta jak i w UNIX SVR4 (chodzi tu zapewne o opis bibliotek standardowych tego systemu - sorry ale sie nie znam) gdy wlaczymy wersje "polska" to wtedy jest wykonywany dla isdigit zupelnie inny kod (to samo sie tyczy i innych funkcji is...). Co za tym idzie nie jest tez generowany blad przy przekroczeniu powyzszego zakresu poniewaz wtedy funkcja ta nie operuje juz na statycznej tablicy. > Z powazaniem > Marek Kotowski Takze z powazaniem Karol Wojtiuk
Technical Details
Message-ID:
<64ht9m$8u0$1@sunsite.icm.edu.pl>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!pingwin.icm.edu.pl!mat.uni.torun.pl!uw.edu.pl!news.icm.edu.pl!not-for-mailReferences:
<64flfj$jds$1@sunsite.icm.edu.pl> <346C146D.4F69@imm.org.pl> <64h90j$sf7$1@sunsite.icm.edu.pl> <346C70EB.6EE9@imm.org.pl>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!pingwin.icm.edu.pl!mat.uni.torun.pl!uw.edu.pl!news.icm.edu.pl!not-for-mail From: "Karol Wojtiuk" <karol@tebo.chelm.pl> Newsgroups: pl.comp.lang.c Subject: Re: Uwaga: blad w funkcji isdigit . Date: Fri, 14 Nov 1997 17:12:41 +0100 Organization: ICM Lines: 73 Message-ID: <64ht9m$8u0$1@sunsite.icm.edu.pl> References: <64flfj$jds$1@sunsite.icm.edu.pl> <346C146D.4F69@imm.org.pl> <64h90j$sf7$1@sunsite.icm.edu.pl> <346C70EB.6EE9@imm.org.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: 7bit