c++ - 在 Linux 中存储语言环境名称的缓冲区大小应该是多少?
问题描述
我想在 Linux 上存储 setlocale() 函数返回的语言环境名称。与 Windows 平台一样,最大区域设置大小定义为LOCALE_NAME_MAX_LENGTH,是否为 Linux 定义了任何类似的宏?此外,我需要在上述两个平台上使用相同的缓冲区。
char buffer[];
buffer = setlocale(LC_ALL, NULL);
解决方案
您在问题中建议的程序将不起作用。您不能将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;
}
推荐阅读
- c - 获取错误代码:collect2.exe: error: ld returned 1 exit status
- html - div内的水平滚动
- javascript - 在我尝试使用包 react-moves 创建的动画上,背景颜色未正确呈现
- python - 用于创建多个数据框的循环
- python - 更新字典时Nonetype不可迭代?
- elasticsearch - 搜索 ngram 标记器和最低分数通过,结果应该相应地得到
- mysql - 创建 UPDATE 触发器时出现 MySQL 语法错误
- c++ - 输入第一个数组出现问题?
- docker - 错误:Dockerfile ubuntu 14.04、cuda 8.0、cudnn 6.0 中的参考格式无效
- reactjs - ReactJs 中的本地图像路径