有没有办法确定LC_CTYPE是否在C中设置?

时间:2017-02-09 03:23:10

标签: c locale setlocale

使用C,有没有办法找出是否设置了LC_CTYPE?我正在重写printf,我的%lc需要以不同的方式工作,具体取决于是否设置了语言环境。

2 个答案:

答案 0 :(得分:1)

LC_CTYPE是一个环境变量。您可以使用任何访问环境变量的常规方法,这些方法因平台而异。例如,POSIX与envp的第三个main参数:

int main(int argc, char **argv, char **envp);

或标准C89 getenv()功能:

char *getenv(const char *name);

例如:

#include <stdlib.h>
char const *get_lc_ctype()
{
    return getenv("LC_CTYPE");
}

注意不要修改getenv(3)返回的字符串,这是未定义的行为。如果你想设置LC_CTYPE,你应该使用(POSIX标准化但不是C标准化的)setenv(3)

int set_lc_ctype(char const *new)
{
    return setenv("LC_CTYPE", new, 1);
}

答案 1 :(得分:0)

通用方法是使用'setlocale()'。 从手册页:

  

如果locale是一个空字符串,“”,应该修改的语言环境的每个部分都是根据          环境变量。

因此,您可以通过

获得LC_TYPE
#include <locale.h>
// ...
char* lc_type= setlocale(LC_CTYPE, "");