strlen获取char*的大小问题
来源:互联网 发布:2015年网络银行交易额 编辑:程序博客网 时间:2024/05/18 16:18
遇到需要获取Char*类型字符串的大小时,使用strlen发现获取的大小比new这个char*时候的大小要大。
代码如下:
HANDLE hfile = CreateFile(str1, GENERIC_READ, 0, NULL, OPEN_EXISTING, NULL, NULL);if(hfile == INVALID_HANDLE_VALUE){AfxMessageBox("加载文本失败!");return ;}DWORD dwsize = GetFileSize(hfile, NULL);char *pDataBuf = new char[dwsize];DWORD dwread = 0;ReadFile(hfile, pDataBuf, dwsize, &dwread, NULL);char da = pDataBuf[dwsize];int i = strlen(pDataBuf);//base64加密char *pOutBuf;pOutBuf = base64_encode(pDataBuf,dwsize);delete []pDataBuf;CloseHandle(hfile);用strlen获取的pDataBuf的大小比dwsize大4。
strlen的用法:
int strlen(const char *str) { assert(str != NULL); int len = 0; while((*str++) != '/0') len++; return len; }
可以看出strlen是查找字符串中的“\0”,即结束符。在原始代码中pDataBuf中所有字节都被写入数据,strlen在查找的时候并不会找到“\0”,所以不会获得准确的字符串长度。可以在申请pDataBuf的大小的时候多申请一个字节,然后将最后一个字节的值设置为“\0”。修改后的代码如下
HANDLE hfile = CreateFile(str1, GENERIC_READ, 0, NULL, OPEN_EXISTING, NULL, NULL);if(hfile == INVALID_HANDLE_VALUE){AfxMessageBox("加载文本失败!");return ;}DWORD dwsize = GetFileSize(hfile, NULL);char *pDataBuf = new char[dwsize+1];memset(pDataBuf, '\0', dwsize+1);DWORD dwread = 0;ReadFile(hfile, pDataBuf, dwsize, &dwread, NULL);char da = pDataBuf[dwsize];int i = strlen(pDataBuf);//base64加密char *pOutBuf;pOutBuf = base64_encode(pDataBuf,dwsize);delete []pDataBuf;CloseHandle(hfile);此时获取的pDataBuf的大小就等于dwsize。
0 0
- strlen获取char*的大小问题
- int*转换成char*,求strlen,涉及大小端问题以及栈
- iOS开发 ----- 关于char *的赋值和字符串之间的复制问题以及sizeof strlen
- sizeof strlen() char * char []
- char[]:strlen和sizeof的区别
- 求strlen((char*)L"abc")的值
- char*中sizeof和strlen的区别
- strlen(char*)与sizeof()的区别
- char数组的scanf与strlen
- char char* char[] sizeof strlen
- strlen的使用问题
- 对于获取浏览器页面大小的问题
- 解决无法获取组件大小的问题
- 一道有趣的面试题——将int型数组强制转换为char*,再求strlen,涉及大小端
- int型数组强制转换为char*,再求strlen,涉及大小端
- string,char,char*,char a[] 占字节数, 以及sizeof,strlen(),str.length()的用法
- string,char,char*,char a[] 占字节数, 以及sizeof,strlen(),str.length()的用法
- TCHAR char strlen
- 华为上机试---购物单(算法:背包问题)
- springIOC
- How to Calculate the Number of IOPS and Throughput of a Database (文档 ID 2206831.1)
- slick 旋转木马(轮播图)插件清空滑块slide的方法
- 利用Memcache解决数据库高并发访问的瓶颈问题
- strlen获取char*的大小问题
- android 6.0权限申请机制
- jQuery中on与bind的区别
- Node.js安装及环境配置之Windows篇
- Audio Source 音频源
- 微信小程序中用户登录和登录态维护
- 协同过滤算法:基于用户和基于物品的优缺点比较
- jsonp详解
- Kafka 日志复制协议探索