gpt4 book ai didi

c++ - 在Linux中存储语言环境名称的缓冲区的大小应该是多少?

转载 作者:行者123 更新时间:2023-12-02 09:48:33 25 4
gpt4 key购买 nike

我想在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;
}
See it online.
上面的代码实际上是C兼容的代码。如果您使用的是C++,则可以使用 setlocale的返回值直接初始化 std::string,而无需手动管理 char数组:
#include <locale.h>  // setlocale
#include <iostream>

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

关于c++ - 在Linux中存储语言环境名称的缓冲区的大小应该是多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62639579/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com