| 项目搜索 |
| |
|
代码片段库:
查看代码片段
浏览
| 提交新的代码片段
| 创建代码包
多字节函数库系列:一般处理:cy_mbslen()
|
类型:
Function |
类别:
Other
|
许可证:
GNU Library Public License |
语言:
C++
|
描述:
获取多字节字符串的字符数。与locale设置有关。
|
该代码片段的版本系列:
片段ID |
下载版本 |
提交时间 |
提交人 |
删除 |
4571 | 0.1 | 2002-06-26 20:58 | renxiao | |
点击"下载版本"来下载该代码片段.
最新版本的代码片段: 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;
}
如果您修改了一个代码片段并且觉得很应该让别人共享,您可以把这作为这个代码片段的最新版本提交上来. |
|