ENGLISH 意见建议 网站地图 网站帮助
广泛智力汇聚   高效成果传播   先进机制培育
联盟首页  |  协同开发  |  开放源码库  |  安全告警  |  开源导航  |  文档中心  |  服务支持  |  共创论坛  |  关于联盟


注册会员 网站帮助
    您的位置 »
    今天是: 2010年11月22日    
项目搜索

完全匹配   
开源软件
软件分类表
新发布软件
其它网站镜像
代码片断
协同开发
文档
论坛
寻求协助
热点项目
站点状态
编译工厂

联系我们
关于联盟

代码片段库:
查看代码片段

浏览 | 提交新的代码片段 | 创建代码包

多字节函数库系列:一般处理:cy_mbslen()

类型:
Function
类别:
Other
许可证:
GNU Library Public License
语言:
C++
 
描述:
获取多字节字符串的字符数。与locale设置有关。

该代码片段的版本系列:

片段ID 下载版本 提交时间 提交人 删除
45710.12002-06-26 20:58renxiao

点击"下载版本"来下载该代码片段.


最新版本的代码片段: 0.1


/*-------------------------Own_lib函数库系列 mbslen.cc-------------------------
cy_mbslen() /mbslen.o /libcyfunc.a

描述: 当处理多字节文本文件(如中文)时, 如欲获得字符串的字节数, 可调用标准strlen()
      函数, 但那是字节数而非字符数, 与locale有关的mbstowcs()标准函数可完成这一任
      务. 为函数名的"一致性", 这里封装cy_mbslen(), 并提供临时改变locale的灵活性.
string:
      需检测字符数的多字节字符串.
locale_ctype = NULL:
      读入字串所属的LC_CTYPE区域(语系/编码). 一般程序开头已经设定, 故此可不管它.
返回值:
      返回待检测字符串string的字符数.

注意! 传入区域字符串后函数将临时改变系统"LC_CTYPE"的设置. 在退出时会恢复其原
      来的设置.

作者: 任逍 |2002.06.15.
版权: GNU General (Library) Public License (GPL/LGPL)

* 编辑器: vim-6.0 |操作系统: TurboLinux7.0简体中文版 *
------------------------------------------------------------------------------*/

#include <stdlib.h>		// usr for MB_CUR_MAX --当前多字节环境下每字最大字节长.
						// usr for mbs* and others.
#include <locale.h> 	// usr for setlocale().--函数提供改变环境"LC_CTYPE"的机会

#include "cyinclude/cymbs.h"


size_t  cy_mbslen(const char * string, const char * locale_ctype = NULL)
{
	size_t	str_chars = 0;
	bool	locale_check = false;
	char*	locale_original = setlocale(LC_CTYPE, NULL);	// LC_CTYPE原来的值
	if (locale_ctype)
	{
		setlocale(LC_CTYPE, locale_ctype);
		locale_check = true;
	}

	str_chars = mbstowcs(NULL, string, 0);
	
	if (locale_check)
		setlocale(LC_CTYPE, locale_original);

	return str_chars;
}


		

提交新版本

如果您修改了一个代码片段并且觉得很应该让别人共享,您可以把这作为这个代码片段的最新版本提交上来.


联盟团体会员
合作伙伴
© 共创软件联盟 版权所有
联盟服务条款 | 联盟隐私权规则 | 联系我们
电话: (8610)68313388-5949 | 传真: (8610)88377936
京ICP备05056057号