首页 > 解决方案 > 在 Linux 中存储语言环境名称的缓冲区大小应该是多少?

问题描述

我想在 Linux 上存储 setlocale() 函数返回的语言环境名称。与 Windows 平台一样,最大区域设置大小定义为LOCALE_NAME_MAX_LENGTH,是否为 Linux 定义了任何类似的宏?此外,我需要在上述两个平台上使用相同的缓冲区。

char buffer[];
buffer = setlocale(LC_ALL, NULL);

标签: c++linuxlocalesetlocale

解决方案


您在问题中建议的程序将不起作用。您不能将setlocale的返回值(类型char *)分配给本地数组:

error: incompatible types in assignment of ‘char*’ to ‘char [10]’
  buffer = setlocale(LC_ALL, NULL);
                                 ^

您必须将返回值分配给指针,然后您可以使用检查其实际长度strlen并将其复制到您的数组中strcpy

#include <locale.h>  // setlocale
#include <string.h>  // strlen, strcpy
#include <stdio.h>   // printf

int main()
{
    char* pLocale;
    pLocale = setlocale(LC_ALL, NULL);
    char buffer[strlen(pLocale)+1];  // + 1 char for string terminator, see https://stackoverflow.com/a/14905963/711006
    strcpy(buffer, pLocale);
    printf("%s\n", buffer);
    return 0;
}

在线查看。

上面其实是一个C兼容的代码。如果您使用的是 C++,则可以使用setlocale' 返回值直接初始化 astd::string而无需手动管理char数组:

#include <locale.h>  // setlocale
#include <iostream>

int main()
{
    std::string locale = setlocale(LC_ALL, NULL);
    std::cout << locale << std::endl;
    return 0;
}

在线查看。


推荐阅读