KONWERSJE 137 #include int main (int argc, char *argv[]) { printf ("%s", argv[1]); } lub: #include int main (int argc, char *argv[]) { fputs (argv[1], stdout); } Źródło problemu leży w konstrukcji funkcji printf. Przyjmuje ona bowiem za pierwszy parametr łańcuch, który następnie przetwarza. Jeśli w pierwszym parametrze wstawimy jakąś zmienną, to funkcja printf potraktuje ją jako ciąg znaków razem ze znakami formatującymi. Zatem ważne, aby wcześnie wyrobić sobie nawyk stosowania funkcji printf z co najmniej dwoma parametrami, nawet w przypadku wyświetlenia samego tekstu. Konwersje Czasami zdarza się, że łańcuch można interpretować nie tylko jako ciąg znaków, lecz np. jako liczbę. Jednak, aby dało się taką liczbę przetworzyć musimy skopiować ją do pewnej zmiennej. Aby ułatwić programistom tego typu zamiany powstał zestaw funkcji bibliotecz- nych. Należą do nich: • atol, strtol — zamienia łańcuch na liczbę całkowitą typu long • atoi — zamienia łańcuch na liczbę całkowitą typu int • atoll, strtoll — zamienia łańcuch na liczbę całkowitą typu long long (64 bity); dodat- kowo istnieje przestarzała funkcja atoq będąca rozszerzeniem GNU, • atof, strtod — przekształca łańcuch na liczbę typu double Ogólnie rzecz ujmując funkcje z serii ato* nie pozwalają na wykrycie błędów przy konwersji i dlatego, gdy jest to potrzebne, należy stosować funkcje strto*. Czasami przydaje się też konwersja w drugą stronę, tzn. z liczby na łańcuch. Do tego celu może posłużyć funkcja sprintf lub snprintf. sprintf jest bardzo podobna do printf, tyle, że wyniki jej prac zwracane są do pewnego łańcucha, a nie wyświetlane np. na ekranie monitora. Należy jednak uważać przy jej użyciu (patrz — BezpieczeÅstwo kodu a ÅaÅcuchy). snprintf (zdeï¬niowana w nowszym standardzie) dodatkowo przyjmuje jako argument wielkoÅÄ bufora docelowego. Operacje na znakach Warto też powiedzieÄ w tym miejscu o operacjach na samych znakach. Spójrzmy na po- niższy program: #include #include #include int main() { int znak;
(…)
… programistom tego typu zamiany powstał zestaw funkcji bibliotecznych. Należą do nich:
• atol, strtol — zamienia łańcuch na liczbę całkowitą typu long
• atoi — zamienia łańcuch na liczbę całkowitą typu int
• atoll, strtoll — zamienia łańcuch na liczbę całkowitą typu long long (64 bity); dodatkowo istnieje przestarzała funkcja atoq będąca rozszerzeniem GNU,
• atof, strtod — przekształca łańcuch na liczbę typu…
... zobacz całą notatkę
Komentarze użytkowników (0)