源代码:
const wchar_t* x = L"abc";
printf("%d\n",wcslen(x));
我用g++ -fshort-wchar xxx.cpp -o xxx
编译了这个,结果得到15
。为什么呢?
答案 0 :(得分: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_t
生成的,因此会计算直到找到(regular_wchar_t)0
。使用短L"abc"
生成的wchar_t
不会以常规wchar_t
终止,因此wcslen
将继续在随机内存中运行,直到找到它为止。