我正在阅读 C.Petzold 关于 Windows 编程的书,并试图了解 Windows 如何处理 unicode。
。例如,我发现 wcslen 的一些实现如下所示:
size_t wcslen(const wchar_t* start)
{
const wchar_t* end = start;
while (*end != L'\0')
++end;
return end - start;
}
我想看看如果我将 wchar_t 视为 char 会发生什么,所以我写了这个函数:
size_t CDECL mywcslen(wchar_t * s)
{
size_t len = 0 ;
while(s[len]){
++len ;
}
return len ;
}
,由于某种原因它工作得很好。例如,如果我们将字符串“Hello”转换为utf-16字节,我们将得到这个字节数组:
0048 0065 006c 006c 006f
,因此函数应该在遇到第一个00
时中断,但事实并非如此。为什么?
so 函数应该在遇到第一个 00 时中断,但事实并非如此。为什么
您在循环中一次读取两个字节。因此,您在第一次循环迭代中读取
0x0048
,在第二次循环迭代中读取 0x0065
,在第三次循环迭代中读取 0x006C
,等等。这些值都是非零,直到您的程序到达第六次循环迭代。因此,您的循环直到第六次循环迭代才会终止。