int*和char*转化可能导致的错误
来源:互联网 发布:linux 查看gpu使用率 编辑:程序博客网 时间:2024/06/05 00:20
其实不一定是指int*,对于任何用户自定义的结构体,在和char*转化时可能带来的问题:
(1) 访问越界,导致结果错误
因为int是4个字节,char*的字节数不定,所以在将char*转化为int*时,可能出现访问越界问题,导致值出错。
(2) 字节对齐问题
#include <iostream>using namespace std;int main(){ char* s = "ab"; int* tmp = (int*)s; cout << *tmp << endl; return 0;}
得到的结果是25185,这是因为字符a存在低地址,值为01100001,字符b存在高地址,值为01100010。
取*tmp时,要从存储字符a的地址开始由低地址向高地址取4个字节,于是*tmp的二进制表示为0110001001100001,十进制表示为25185
如果是复合数据类型,在将char*转化为struct *时,同样考虑字节对齐带来的问题。
- int*和char*转化可能导致的错误
- char和unchar 强制转化为int的区别
- java中int和char的转化方法
- wrapper primitives和char向int转化
- char str[] 与 int的转化
- int型与char型的转化
- int、char、String之间的相互转化
- char* 转化为int
- char与int转化
- CString和string 、CString和int、char*和CString的转化
- string和char *的转化
- char和int的转换
- 几个可能导致链接错误的原因
- VS2010cstring和int的转化
- CString float int char 转化
- 字符串(char*)转化为int
- int转化为char输出
- QString 与char int double的转化(转载)
- 淘宝数据魔方技术架构解析
- windows判断本机网络连接的方法
- 邮件功能总结
- Android 按两次back键退出 -- 效率最高版
- PHP正则表达式语法
- int*和char*转化可能导致的错误
- spring IOC容器实例化Bean的方式与RequestContextListener应用
- 书虫必备Android应用——豆瓣购书单
- TinyXML:一个优秀的C++ XML解析器
- java的Comparator和Comparable
- OA发展趋势
- java调用(c+opencv)的DLL
- java复制文件的一种方法
- DataGridView 添加checkBox