c++ - g++ 和 vc++ 中 wcscpy 的不同行为
问题描述
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
谁能告诉我为什么会有差异。
我已经包含了所有必要的头文件
解决方案
见这里wcscopy()
:_
如果 dest 数组不够大,则行为未定义。
未定义意味着一个编译器(如 VC++)和另一个(如 g++)可以自由产生不同的行为/结果。
由于这种初始化. wchar_t ws1[]=L"happylearning";
_ _ 而 in ,只有 6 个字符长(5 + 1 个空终止符)。因此,根据上述文档的摘录,目标数组( ) 太小而无法复制到它上面。因此违反了这一点,因此您遇到了未定义的行为。ws1
char
wchar_t ws2[]=L"Happy";
ws2
wcscpy()
ws2
ws1
值得一提的是,这根本不是两个给定编译器之间的一致差异,但未定义的行为意味着即使对于同一个编译器,结果也不能保证以任何形式重现或保持一致。
推荐阅读
- amazon-quicksight - AWS QuickSight 与 IoT Analytics 数据存储 - 未导入一列
- python - 隔离图像中的多个暗区
- java - 为什么在 java 命令行中 ^ 之后传递的参数被忽略?
- node.js - Orocommerce 作曲家安装失败
- tcl - 为什么我不能在模块设计中添加时钟向导?
- asp.net-core-webapi - ASP.NET Core Web API 失败,“无法找到此本地主机页面”,json 结果大 - DisableRequestSize 无效
- r - 使用 Rmpfr 在 R 中进行高精度计算
- flutter - Flutter 的 Navigation 2.0 没有更新 UI
- php - MySQL 或 PHP 获取与搜索字符串匹配的字符串
- pytorch - Pytorch:BERT 的损失和准确度曲线