Galileo Computing < openbook > Galileo Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger.

 << zurück
C von A bis Z von Jürgen Wolf
Das umfassende Handbuch für Linux, Unix und Windows
– 2., aktualisierte und erweiterte Auflage 2006
Buch: C von A bis Z

C von A bis Z
1.116 S., mit CD, Referenzkarte, 39,90 Euro
Galileo Computing
ISBN 3-89842-643-2
gp Kapitel 22 Weitere Headerdateien und ihre Funktionen (ANSI C)
  gp 22.1 <assert.h> -– Testmöglichkeiten und Fehlersuche
  gp 22.2 <ctype.h> – Zeichenklassifizierung und Umwandlung
  gp 22.3 Mathematische Funktionen – <math.h>
  gp 22.4 <stdlib.h>
    gp 22.4.1 Programmbeendigung – exit(), _exit(), atexit() und abort()
    gp 22.4.2 Konvertieren von Strings in numerische Werte
    gp 22.4.3 Bessere Alternative – Konvertieren von Strings in numerische Werte
    gp 22.4.4 Zufallszahlen
    gp 22.4.5 Absolutwerte, Quotient und Rest von Divisionen
    gp 22.4.6 Suchen und Sortieren – qsort() und bsearch()
    gp 22.4.7 system()
  gp 22.5 <locale.h> – Länderspezifische Eigenheiten
  gp 22.6 <setjmp.h>
  gp 22.7 <signal.h>
  gp 22.8 <string.h> – Die mem…-Funktionen zur Speichermanipulation
    gp 22.8.1 memchr() – Suche nach einzelnen Zeichen
    gp 22.8.2 memcmp() – Bestimmte Anzahl von Bytes vergleichen
    gp 22.8.3 memcpy() – Bestimmte Anzahl von Bytes kopieren
    gp 22.8.4 memmove() – Bestimmte Anzahl von Bytes kopieren
    gp 22.8.5 memset() – Speicherbereich mit bestimmten Zeichen auffüllen
  gp 22.9 Erweiterter ANSI C-Standard (ANSI C99)
    gp 22.9.1 Neue elementare Datentypen
    gp 22.9.2 <stdint.h> – Ganzzahlige Typen mit vorgegebener Breite
    gp 22.9.3 Komplexe Gleitpunkttypen
    gp 22.9.4 <iso646.h> – Symbolische Konstanten für Operatoren
    gp 22.9.5 Deklaration von Bezeichnern
    gp 22.9.6 inline-Funktionen
    gp 22.9.7 Vordefinierte Makros
    gp 22.9.8 <math.h> – Neue Funktionen
    gp 22.9.9 <wchar.h> – (NA1)
    gp 22.9.10 <wctype.h> (NA1)
    gp 22.9.11 <fenv.h> – Kontrolle der Gleitpunkzahlen-Umgebung
    gp 22.9.12 <inttypes.h> – Für genauere Integer-Typen
    gp 22.9.13 <tgmath.h> – Typengenerische Mathematik-Funktionen
    gp 22.9.14 Zusammenfassung


Galileo Computing - Zum Seitenanfang

22.5 <locale.h> – Länderspezifische Eigenheiten  toptop

In ANSI C sind auch Funktionen vorhanden, die länderspezifische Eigenheiten wie bspw. die Formatierung von Geldbeträgen beachten. Dabei handelt es sich um zwei Funktionen und mehrere Makros, die recht selten Beachtung finden.

Wenn Sie ein Programm starten, werden die lokalen Aspekte zunächst nicht berücksichtigt und das Programm wird somit mit den Standard-Einstellungen der Umgebung gestartet.

Die Funktion, mit der Sie ein Programm mit den lokalen Eigenheiten zur Laufzeit anpassen können, lautet:

#include <locale.h>
char *setlocale( int kategorie, const char *name );

Manchmal will man nicht die kompletten lokalen Aspekte berücksichtigen, daher wurde die Kategorie (erstes Argument) folgendermaßen aufgeteilt:


Tabelle 22.3   Kategorien zur Lokalisierung der Umgebung

Kategorie Betroffen davon im Programm
LC_ALL alle lokalen Aspekte (die gleich noch in der Kategorie folgen) werden berücksichtigt
LC_COLLATE nur die Funktionen strcoll() und strxfrm()
LC_CTYPE nur die Funktionen für die Zeichenbehandlung in ctype.h bzw. wctype.h
LC_MONETARY die Formatierungs-Informationen für die Darstellung von Geldbeträgen (siehe localeconv())
LC_NUMERIC das Zeichen für den Dezimalpunkt der Ein/Ausgabe und Stringkonvertierungen
LC_TIME die Funktion strftime()

Für das Argument name in der Funktion setlocale() sind folgende Angaben möglich:


Tabelle 22.4   Zweites Argument für setlocale()

Angabe für name Bedeutung
"C" Keine lokalen Aspekte werden berücksichtigt.
"" Einstellung richtet sich nach der Umgebung des Compilers.
NULL Die lokale Umgebung wird nicht verändert. Wird verwendet, um mithilfe des Rückgabewertes von setlocale() die alte Umgebung zu sichern und eventuell wiederherszustellen.

Hierzu ein einfaches Beispiel, womit die lokale Umgebung ermittelt wird, dann anschließend entsprechend dem Einsatzgebiet des Compilers verändert und zum Schluss wiederhergestellt wird.

/* my_setlocale.c */
#include <stdio.h>
#include <locale.h>
#define KOMMA 3.3223
int main(void) {
   char *local_save = setlocale(LC_ALL, NULL);
   char *local;
   printf("Lokale Umgebung: %s (Standard)\n", local_save);
   printf("Gleitpunkt: %f\n",KOMMA);
   local = setlocale( LC_ALL, "");
   printf("Neue lokale Umgebung: %s\n", local);
   printf("Gleitpunkt: %f\n",KOMMA);
   printf("Standard-Umgebung Wiederherstellen\n");
   local = setlocale( LC_ALL, local_save);
   printf("Lokale Umgebung: %s (Wiederhergestellt)\n", local);
   return 0;
}

Benötigen Sie außerdem Informationen für die Formatierung von numerischen Werten wie z.B. Dezimalpunkt oder dem Währungssymbol, steht Ihnen noch folgende Funktion zur Verfügung:

#include <locale.h>
struct lconv *localeconv( void );

Die Funktion füllt eine Struktur Namens lconv mit der aktuell gesetzten länderspezifischen Umgebung. Diese Struktur beinhaltet folgende Mitglieder:

struct lconv {
 char* decimal_point;     // Zeichen Dezimalpunkt
 char* thousands_sep;     // Trennzeichen für Gruppen von Ziffern
 char* grouping;          // Größe einer Gruppe von Ziffern
 char* int_curr_symbol;   // Intern. Symbol für lokale Währung
 char* currency_symbol;   // lokales Währungssymbol
 char* mon_decimal_point; // Zeichen Dezimalpunkt b. Geldbeträge
 // Trennzeichen für Gruppen von Ziffern bei Geldbeträgen
 char*   mon_thousands_sep;
// Größe einer Gruppe von Ziffern bei Geldbeträgen
 char*   mon_grouping;
 char*   positive_sign;   // Symbol für positive Geldbeträge
 char*   negative_sign;   // Symbol für negative Geldbeträge
/* Anzahl der Ziffern nach Dezimalpunkt von Geldbeträgen
 * (international) (meistens 2) */
 char   int_frac_digits;
/* Anzahl der Ziffern nach Dezimalpunkt von Geldbeträgen
 * (national) (meistens 2) */
 char   frac_digits;
/* Für positive Geldbeträge  0=Währungssymbol nach dem Betrag;
 *  1=Währungssymbol vor dem Betrag */
 char   p_cs_precedes;
/* Für pos. Geldbeträge Leerzeichen zwischen Währungssymbol
 * und dem Betrag: 1=Leerzeichen; 0=kein Leerzeichen */
 char   p_sep_by_space;
/* Für negative Geldbeträge  0=Währungssymbol nach dem Betrag
 * 1=Währungssymbol vor dem Betrag */
 char   n_cs_precedes;
/* Für negative Geldbeträge. Leerzeichen zwischen
 * Währungssymbol und dem Betrag: 1=Leerzeichen;
 * 0=kein Leerzeichen */
 char   n_sep_by_space;
 char   p_sign_posn;    // Position von positive_sign
 char   n_sign_posn;    // Position von negative_sign
};
 << zurück
  
  Zum Katalog
Zum Katalog: C von A bis Z
C von A bis Z
bestellen
 Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen?
Ihre Meinung

 Buchtipps
Zum Katalog: Shell-Programmierung






 Shell-Programmierung


Zum Katalog: Linux-UNIX-Programmierung






 Linux-UNIX-Programmierung


Zum Katalog: C/C++






 C/C++


Zum Katalog: UML 2.0






 UML 2.0


Zum Katalog: Reguläre Ausdrücke






 Reguläre Ausdrücke


Zum Katalog: Linux






 Linux


 Shopping
Versandkostenfrei bestellen in Deutschland und Österreich
InfoInfo





Copyright © Galileo Press 2006
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


[Galileo Computing]

Galileo Press, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, info@galileo-press.de