侧边栏壁纸
博主头像
noerror

虚灵不寐,众理具而万事出。

  • 累计撰写 238 篇文章
  • 累计创建 9 个标签
  • 累计收到 2 条评论
标签搜索

目 录CONTENT

文章目录

duplocale函数用法详解

noerror
2022-10-19 / 0 评论 / 0 点赞 / 47 阅读 / 658 字 / 正在检测是否收录...

duplocale函数用法详解

duplocale函数简介

  • 头文件包含
#include <locale.h>
  • 函数定义
locale_t duplocale(locale_t  locobj );

duplocale函数常见使用错误

  • 编译错误
    warning: implicit declaration of function ‘duplocale’ [-Wimplicit-function-declaration]
    解决办法:包含头文件
#include <locale.h>

duplocale函数详细描述

duplocale ()函数创建locobj 引用的区域设置对象的副本
如果locobj是LC_GLOBAL_LOCALE ,则duplocale ()创建一个区域设置对象,该对象包含由setlocale (3)确定的全局区域设置的副本

duplocale函数返回值

成功后,duplocale ()返回新区域设置对象的句柄。当出现错误时,它返回"(locale_t)\ 0"并设置errno以指示错误的原因。

duplocale函数错误码

  • ENOMEM 内存不足,无法创建重复的区域设置对象。

duplocale函数其他说明

复制区域设置可用于以下目的:

  • 创建要在其中修改多个类别之一的区域设置对象的副本(使用newlocale (3))
  • 要获得当前区域设置的句柄,该句柄可用于其他使用区域设置句柄的函数,如toupper_l (3),可以通过将duplocale ()应用于以下调用返回的值:.ip loc=uselocale((locale_t)0);.ip此技术是必要的,因为上面的uselocale (3)调用可能返回值LC_GLOBAL_LOCALE ,如果传递给函数如toupper_l (3),则会导致未定义的行为。调用duplocale ()可以用来确保LC_GLOBAL_LOCALE值被转换为可用的区域设置对象。参见下面的示例。

应该使用 freelocale (3)释放由duplocale ()创建的每个区域设置对象

duplocale函数使用举例

下面的程序使用uselocale (3)和duplocale ()获得当前区域设置的句柄,然后将其传递给toupper_l (3)。程序接受一个命令行参数,即转换为大写并在标准输出中显示的字符串。它的使用示例如下:

$ \fB./a.out abc\fP
ABC

Program source&

#define _XOPEN_SOURCE 700
#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>

#define errExit(msg)    do { perror(msg); exit(EXIT_FAILURE); \e
                       } while (0)

int
main(int argc, char *argv[])
{
   locale_t loc, nloc;

   if (argc != 2) {
       fprintf(stderr, "Usage: %s string\en", argv[0]);
       exit(EXIT_FAILURE);
   }

   /* This sequence is necessary, because uselocale() might return
      the value LC_GLOBAL_LOCALE, which can\(aqt be passed as an
      argument to toupper_l() */

   loc = uselocale((locale_t) 0);
   if (loc == (locale_t) 0)
       errExit("uselocale");

   nloc = duplocale(loc);
   if (nloc == (locale_t) 0)
       errExit("duplocale");

   for (char *p = argv[1]; *p; p++)
       putchar(toupper_l(*p, nloc));

   printf("\en");

   freelocale(nloc);

   exit(EXIT_SUCCESS);
}
0

评论区