En utilisant C, existe-t-il un moyen de savoir si LC_CTYPE est activé? Je réécris printf et mon% lc doit fonctionner différemment selon que les paramètres régionaux sont définis.Y at-il un moyen de déterminer si LC_CTYPE est défini dans C?
1
A
Répondre
1
LC_CTYPE
est une variable d'environnement. Vous pouvez utiliser n'importe laquelle des méthodes normales d'accès aux variables d'environnement, qui diffèrent selon la plateforme. Par exemple, troisième argument envp
de Posix à main
:
int main(int argc, char **argv, char **envp);
ou la fonction standard C89 getenv()
:
char *getenv(const char *name);
Par exemple:
#include <stdlib.h>
char const *get_lc_ctype()
{
return getenv("LC_CTYPE");
}
Veillez à ne pas modifier les chaînes retournées par getenv(3)
, c'est un comportement indéfini. Si vous souhaitez définir LC_CTYPE
, vous devez utiliser le (POSIX normalisé mais pas C normalisé) setenv(3)
:
int set_lc_ctype(char const *new)
{
return setenv("LC_CTYPE", new, 1);
}
0
Une façon générique est d'utiliser 'setlocale(). De la page man:
Si locale est une chaîne vide, « », chaque partie du lieu qui doit être modifié est défini en fonction des variables d'environnement .
Ainsi, vous obtenez LC_TYPE par
#include <locale.h>
// ...
char* lc_type= setlocale(LC_CTYPE, "");