int main()
{
wchar_t ws1[] = L"happylearning";
wchar_t ws2[] = L"Happy";
wcscpy(ws2, ws1);
wcout << ws1 << endl
<< ws2 << endl;
}
这会在VC ++和g ++中产生不同的输出。
方式:在VC ++中:
happylearning
happylearning
在g ++中:
rning
happylearning
谁能让我知道为什么会有差异。
我已包含所有必需的头文件
答案 0 :(得分:4)
有关wcscopy()
,请参见here:
如果dest数组不够大,则行为为 undefined 。
未定义表示一个编译器(如VC ++)和另一个编译器(如g ++)可以自由产生不同的行为/结果。
在wchar_t ws1[]=L"happylearning";
中,ws1
长14个字符(13 + 1个空终止符),这是由于这种初始化{{1}的 C样式数组的方式}。在char
中,wchar_t ws2[]=L"Happy";
仅6个字符长(5 +1个空终止符)。因此,根据上述ws2
文档的摘录,目标数组(wcscpy()
)太小,无法复制到ws2
上。因此违反了此规则,因此违反了您遇到的未定义行为。
值得一提的是,这在两个给定的编译器之间根本不是一致的差异,但是未定义的行为意味着即使对于同一编译器,结果也不能保证在任何编译器中都能再现或保持一致表格。