使用-fshort-wchar时,wcslen返回错误的长度

时间:2013-07-25 02:26:48

标签: c linux wchar

源代码:

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

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

1 个答案:

答案 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将继续在随机内存中运行,直到找到它为止。