`

strlen,wcslen与sizeof的区别(转载)

 
阅读更多

strlen,wcslen与sizeof的区别(转载)

#ifdef UNICODE
#define lstrlen  lstrlenW
#else
#define lstrlen  lstrlenA
#endif

所以在Unicode下,lstrlen等同lstrlenW(LPCWSTR lpString),在非Unicode下等同lstrlenA(LPCSTR lpString)

。而lstrlenW又等同于wcslen,lstrlenA又等同于strlen,只不过一个是C的标准函数,一个是WinAPI函数。

所以只需讨论strlen,wcslen与sizeof的区别。

 

#include "stdafx.h"
#include "windows.h"
#include <iostream>
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
 char str1[]="abcde";
 char str2[]="我是中国人";
 WCHAR str3[]=L"abcde";
 WCHAR str4[]=L"我是中国人";

 cout<<strlen(str1)<<endl;//5
 cout<<sizeof(str1)<<endl;//6
 cout<<endl;

 cout<<strlen(str2)<<endl;//10
 cout<<sizeof(str2)<<endl;//11
 cout<<endl;

 cout<<wcslen(str3)<<endl;//5
 cout<<sizeof(str3)<<endl;//12
 cout<<endl;

 cout<<wcslen(str4)<<endl;//5
 cout<<sizeof(str4)<<endl;//12
 cout<<endl;

 return 0;
}

输出结果:

5
6

 

10
11

 

5
12

 

5
12

请按任意键继续. . .

由此可见,strlen返回的是字节数(对中英文不一致,中文占两个字节,不包括'/0'),而wcslen返回的是字符

数(对中英文一致)。而sizeof返回的是字节数(包含'/0',而'/0'在Unicode下也是占两个字节的)。

 

分享到:
评论

相关推荐

    常见的VC获取字符串长度的方法[定义].pdf

    strlen() 与 wcslen() 采取 0 作为字符串的结束符,并返回不包括 0 在内的字符数目。 3. 使用 CString::GetLength() 获取字符串长度 CStringT 继承于 CSimpleStringT 类,该类具有函数: `int GetLength( ) const...

    StringSecu.zip

    "StringSecu.zip"这个压缩包文件显然聚焦于C/C++编程中与字符串处理相关的安全编码实践,特别是涉及到`sizeof`、`strlen`和`wcslen`这三个函数的使用。下面我们将深入探讨这些主题。 `sizeof`是C/C++中的一个运算符...

    VC中字符串之间的转换和写入文本

    cFile.Write(wszString, wcsLen * sizeof(wchar_t)); cFile.Flush(); cFile.Close(); ``` 在此示例中,我们首先计算转换后所需的内存大小,然后进行实际的转换操作。最后,我们将转换后的Unicode字符串写入文本文件...

    常见的获取字符串长度的方法

    `strlen()`和`wcslen()`分别是C/C++中的标准库函数,用于计算字符串中字符的数量,不包括结束符`\0`。 **示例代码**: ```cpp printf("strlen(s1): %d\n", strlen(s1)); printf("wcslen(s2): %d\n", wcslen(s2)); ``...

    ANSI文件转UTF-8

    cFile.Write(wszString, wcsLen * sizeof(wchar_t)); // 刷新缓冲区确保所有数据被写入磁盘 cFile.Flush(); // 关闭文件 cFile.Close(); // 释放内存 delete[] wszString; wszString = NULL; ``` 这里需要注意的...

    Windows驱动编程入门.pdf

    在C语言中,我们通常使用`char*`或`wchar_t*`定义字符串,并通过`strlen`或`wcslen`来计算字符串长度,但这种方式存在缓冲区溢出的风险。在Windows驱动开发中,为了增强安全性,使用了`UNICODE_STRING`和`ANSI_...

    UTF8 Union ANSI

    cFile.Write(wszString, wcsLen * sizeof(wchar_t)); cFile.Flush(); cFile.Close(); delete[] wszString; wszString = NULL; } ``` 在这个示例中,我们首先定义了一个 ANSI 字符串 `szAnsi`,然后使用 `...

    C++中一些容易混淆的知识

    strlen()、wcslen()、sizeof() 对字符串的操作 - **strlen()** 和 **wcslen()**:分别用于计算C风格字符串的长度(不包括结尾的空字符)。`strlen()`用于`char`数组,`wcslen()`用于`wchar_t`数组。 - **sizeof()*...

    Linux下获取本机MAC ,IP,NetMask,以及Linux下编码转换

    size_t inlen = wcslen(unicode_str) * sizeof(wchar_t); size_t outlen = inlen * 4 + 1; char *outbuf = malloc(outlen); memset(outbuf, 0, outlen); size_t result = iconv(cd, (char **)&unicode_str, &...

    char与wchar_t互转

    ### C++中char与wchar_t互转方法解析 在C++编程中,字符编码的转换是常见的需求之一,尤其是在处理不同编码格式的文本时。本文将详细介绍如何在C++中实现`char`类型与`wchar_t`类型的互相转换,并通过具体的代码...

    WINDOWS下UNICODE操作.txt

    6. 在计算字符串长度或分配内存时,考虑到每个字符的宽度,避免使用 `sizeof(char)` 而应使用 `sizeof(TCHAR)`。 #### 十、字符串比较 为了比较字符串,可以使用 `CompareString` 函数,该函数允许指定比较选项,...

Global site tag (gtag.js) - Google Analytics