0

源代码:

const wchar_t* x = L"abc";   
printf("%d\n",wcslen(x));

我用 编译了这个g++ -fshort-wchar xxx.cpp -o xxx,我得到15了结果。为什么?

4

1 回答 1

4

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_ts 生成的,因此会一直计数,直到找到 a (regular_wchar_t)0。用L"abc"short 生成wchar_t的不会以常规 终止wchar_t,因此wcslen将继续在随机内存中运行,直到找到一个。

于 2013-07-25T02:53:06.287 回答