关于sprintf内存溢出
来源:互联网 发布:sdrsharp软件 编辑:程序博客网 时间:2024/05/29 16:39
需要把各种类型的数据整合到同一个字符串中的时候,我想到了用printf的近亲——sprintf,后来发现sprintf整合的结果总是不正确,下面上代码片段
char text[1]; /* print ip addresses and udp ports */ sprintf(text,"%d.%d.%d.%d.%d -> %d.%d.%d.%d.%d", ih->saddr.byte1, ih->saddr.byte2, ih->saddr.byte3, ih->saddr.byte4, sport, ih->daddr.byte1, ih->daddr.byte2, ih->daddr.byte3, ih->daddr.byte4, dport); ui->listWidget->addItem(text); char sip[10],sp[10],dip[10],dp[5]; sprintf(sip,"%d.%d.%d.%d", ih->saddr.byte1, ih->saddr.byte2, ih->saddr.byte3, ih->saddr.byte4); sprintf(dp,"%d",sport); sprintf(dip,"%d.%d.%d.%d", ih->daddr.byte1, ih->daddr.byte2, ih->daddr.byte3, ih->daddr.byte4); sprintf(dp,"%d",dport); ui->tableWidget->insertRow(row); ui->tableWidget->setItem(row,0,new QTableWidgetItem(text)); ui->tableWidget->setItem(row,1,new QTableWidgetItem(sport)); ui->tableWidget->setItem(row,3,new QTableWidgetItem(text)); ui->tableWidget->setItem(row,4,new QTableWidgetItem(dport));
后面的tableWidegt中的数据总是不正确的。
上网找原因发现是不安全的sprintf函数造成的,前面的字符数组空间开得太小了,但是sprintf在执行时不会考虑前面的字符串数组空间是否足够,它会自动地占用后续空间,这样就会影响后面的数据。后来我将所有的暂存字符串的数组都换成了一个,程序结果就正常了。
结论:使用sprintf时要注意内存是否超出。
0 0
- 关于sprintf内存溢出
- mfc sprintf引发的内存溢出
- 关于WebLogic内存溢出
- 关于内存溢出
- 关于内存溢出
- 关于内存溢出
- 关于内存溢出
- 关于Android内存溢出
- 关于内存溢出
- 关于图片的内存溢出
- 关于myeclipse内存溢出问题
- 关于JAVA内存溢出问题
- 关于MyEclipse内存溢出问题
- 关于java内存溢出问题
- 关于JAVA内存溢出问题
- 关于内存溢出的问题
- 关于JVM与内存溢出
- java关于OutOfMemoryError(内存溢出)
- 选择困难症
- XML encoding转换为UTF-8(JAVA)
- 四大组件之一Activity
- #import、#include和@class的区别
- Maven安装与配置(Linux+Windows)
- 关于sprintf内存溢出
- mysql基础:5、mysql中的连接查询
- Android自定义ViewPager:水平滑动弹性效果,侧滑刷新加载的ViewPager
- LeetCode 357. Count Numbers with Unique Digits
- unit2.5 使用逻辑卷管理器管理灵活存储
- 【BZOJ2038】小Z的袜子(hose)(莫队算法 + 分块)
- fastDFS中使用php上传文件 -- http上传与下载图片
- AOP实现之代理bean创建过程(三)
- 结合Scikit-learn介绍几种常用的特征选择方法