源代码:
const wchar_t* x = L"abc";
printf("%d\n",wcslen(x));
我用 编译了这个g++ -fshort-wchar xxx.cpp -o xxx
,我得到15
了结果。为什么?
gcc 文档警告:
*Warning:* the `-fshort-wchar' switch causes GCC to generate code
that is not binary compatible with code generated without that
switch. Use it to conform to a non-default application binary
interface.
据推测,wcslen
您要链接到的 是使用正常长度wchar_t
s 生成的,因此会一直计数,直到找到 a (regular_wchar_t)0
。用L"abc"
short 生成wchar_t
的不会以常规 终止wchar_t
,因此wcslen
将继续在随机内存中运行,直到找到一个。