sscanf 函数遇到的一个小问题及其解决方法
来源:互联网 发布:microsoft fix it官网 编辑:程序博客网 时间:2024/05/21 12:46
需求是这样:要将一个unsigned char数组的ascii值按照小尾顺序转换成一个int.
比如说: unsigned char array[]={0x01,0xab,0x33,0x05}
转换出来的int型数就是: 0x0533ab01 = 87272193
对于32位机来说,int的长度是4,所以array最多只能是4维数组。如果是64位机就可以去到8维。
编程实现如下:
void fn() {
int theInt = 0;
sscanf((const char*)(array), "%s", &theInt );
}
debug过程中, theInt 可以被正确赋值。但是在函数结束符 } 处,发生了一个stack overflow 栈溢出错误。
想了一下,问题在这里:
sscanf接受的 convert format string是"%s",也就是按字符串方式输出。大家都知道C++中字符串的长度是N+1,最后一位以NULL结尾。所以sscanf影响的,是 theInt 和 theInt 后面1位的内存区域,这就是堆栈错误的根源。
改成这样,BUG消失:
void fn() {
int theInts[2] = {0};
sscanf((const char*)(array), "%s", theInts );
}
魔鬼常常在细节中。
- sscanf 函数遇到的一个小问题及其解决方法
- sscanf的一个问题
- 再记一下sscanf的一个小问题
- 遇到的一个小问题
- 小函数sscanf的妙用
- sscanf()函数的使用及其实例
- 在部署Web工程时遇到的一个小问题,及解决方法
- 最近做了一个iOS小应用,记录下遇到的问题以及解决方法
- 今天遇到的一个问题及解决方法
- JavaApplet遇到的一个问题及解决方法
- sscanf 使用中遇到的问题
- ubuntu 15.04 的安装遇到的问题及其解决方法
- PD导入Model到Oracle9i遇到的问题及其解决方法
- jedis开发过程中遇到的问题及其解决方法
- 安装LDAP Server过程中遇到的问题及其解决方法
- 项目一遇到的一些问题及其解决方法
- 学习Java Web开发中遇到的问题,及其解决方法
- hi3520d烧写开发板遇到的问题及其解决方法
- 【动态规划】【RQNOJ】刘翔!加油!
- meta标签的大用
- uboot移植,编译及环境变量,启动等方面---from README
- linux的directory
- ic卡的应用
- sscanf 函数遇到的一个小问题及其解决方法
- 关于PHP在数组对象与JSON数据之间的转换问题(编码问题)
- 提高alexa排名的八种方法
- 命令行 查看表结构
- oracle 数据导入和导出
- Catch That Cow
- QT 问题 集锦
- javascript getElementById 使用方法及用法
- asp.net实现UNIX 时间戳