2012年(158)
分类: C/C++
2012-11-23 16:48:26
#include
int main( void )
{
char str[16] = "1234567";
*(__int64*)(str+1) = *(__int64*)(str+0);
std::cout << str << std::endl;
}
应该(注1)输出11234567,但 VS200X 在32位平台下输出为11234467
VS200X 将 *(__int64*)(str+1) =
*(__int64*)(str+0); 分解为
*(__int32*)(str+1) =
*(__int32*)(str+0);
*(__int32*)(str+5) = *(__int32*)(str+4);
这显然不对
注1:需要说明某些平台有特定的数据对齐要求,会执行崩溃吗?当然不需要^_^