当前位置: 首页 > news >正文

菠菜网站怎样做安全环保网站建设

菠菜网站怎样做安全,环保网站建设,长春网站seo公司,网站后缀tw一、引言 当我们编写代码#xff1a;实现网络接收、读取文件内容等功能时#xff0c;我们往往要在内存中开辟一个输入缓冲区(又名#xff1a;input buffer/读缓冲区#xff09;来存贮接收到的数据。在C里面我们可以用如下方法开辟输入缓冲区。 ①使用C语言中的数组#x…一、引言 当我们编写代码实现网络接收、读取文件内容等功能时我们往往要在内存中开辟一个输入缓冲区(又名input buffer/读缓冲区来存贮接收到的数据。在C里面我们可以用如下方法开辟输入缓冲区。 ①使用C语言中的数组 char buf[100] {0}; ②使用malloc/new动态分配内存 char *pBuf new char[100]; ③使用std::string string sBuf; ④使用vectorchar / vectorunsigned char vectorchar vecBuf(100); 在这里面推荐使用方法④作为输入缓冲区。方法①在栈中开辟空间对于大数组可能会有栈内存不够的问题。方法②在堆上分配内存但是使用完需要程序员自行手动释放(delete pBuf)而且需要一个额外的变量记录申请空间的大小。方法③只能处理字符串不能处理二进制数据。下面具体阐述使用vectorchar作为输入缓冲区的优势。 二、使用vectorchar作为输入缓冲区的优势 一跟方法①相比vectorchar可以在程序运行时调整大小 例子1 main.cpp #include iostream #include fstream #include vector #include windows.h// 通过stat结构体 获得文件大小单位字节 size_t getFileSize1(const char* fileName) {if (fileName NULL) {return 0;}// 这是一个存储文件(夹)信息的结构体其中有文件大小和创建时间、访问时间、修改时间等struct stat statbuf;// 提供文件名字符串获得文件属性结构体stat(fileName, statbuf);// 获取文件大小size_t filesize statbuf.st_size;return filesize; }int main() {const char *fileName test.txt;std::ifstream ifs(fileName);int nFileSize getFileSize1(fileName);char buf[100] { 0 };ifs.read(buf, sizeof(buf));printf(%s, buf);return 0; } test.txt hello world! 运行效果 上述的例子中定义一个大小为100字节的数组buf一次性读取文件test.txt中的内存并保存到buf里面然后打印。该代码存在的问题是假如文件test.txt中的内容非常多超过数组的最大容量100个字节则超出数组容量外超过100个字节之外的数据会丢失。针对该问题我们可以尝试将上述代码优化为例子2。 例子2 我们将例子1中的语句 char buf[100] { 0 };  修改为char buf[nFileSize] { 0 }; 结果编译报错了  在例子2中我们尝试将数组buf的大小定义为要读取的文件的大小。很明显这样是不行的因为定义数组的时候数组的大小必须确定并且得是整型。我们继续优化代码。 例子3 main.cpp #include iostream #include fstream #include vector #include windows.h// 通过stat结构体 获得文件大小单位字节 size_t getFileSize1(const char* fileName) {if (fileName NULL) {return 0;}// 这是一个存储文件(夹)信息的结构体其中有文件大小和创建时间、访问时间、修改时间等struct stat statbuf;// 提供文件名字符串获得文件属性结构体stat(fileName, statbuf);// 获取文件大小size_t filesize statbuf.st_size;return filesize; }int main() {const char *fileName test.txt;std::ifstream ifs(fileName);int nFileSize getFileSize1(fileName);std::vectorchar vecBuf(nFileSize);ifs.read(vecBuf[0], vecBuf.size());for (const auto e : vecBuf){std::cout e;}return 0; } 运行效果如下 例子3使用了vectorchar所以可以在程序运行过程中调整大小可以用resize()调整vector大小。从而解决例子2中的问题。可能有些朋友会说用方法②“使用malloc/new动态分配内存”不一样可以吗确实是可以。但是vectorchar相当于对malloc/new进行了一层封装使用起来更方便。而且不用手动调用delete函数释放内存避免内存泄漏。 二跟方法②相比vectorchar提供了各种方法 使用vector::reserve预分配内存 使用vector::size的记录缓冲区位置 使用vector::resize增长/清除缓冲区 使用your_vector[0]转换为C缓冲区 使用vector::swap转换缓冲区所有权 例子4 int bufsize 4096; char *pBuf new char[bufsize]; int recv read(sock, pbuf, bufsize) 例子4是一个网络接收的小demo。可以看到使用new的方式需要额外增加一个变量bufsize来存贮缓冲区的大小。我们可以用vectorchar优化如下 例子5 std::vectorchar buf(4096); // create buffer with preallocated size int recv read( sock, buf[0], buf.size() ); 可以看到vector已经提供了size()方法来记录缓冲区的大小不需要再额外增加变量了。所以使用vectorchar更方便而且离开作用域自动释放内存不需要手动delete更安全。 三跟方法③相比vectorchar可以存贮二进制数据 例子6 main.cpp #include iostream #include vector #include stringusing namespace std;int main() {string strBuf abc\0ef;cout strBuf endl;std::vectorchar vecBuf { a, b, c, \0, e, f};for (const auto e : vecBuf){std::cout e;}return 0; } 运行效果如下 可以看到使用std::string丢失了\0之后的数据但是vectorchar不会。所以std::string只能存贮字符串不能存贮二进制数据。二进制数据中可能会包含0x00即\0刚好是字符串结束标志使用std::string会有截断问题。所以对于二进制数据的保存比如保存图片网络接收我们得要用vectorchar不要用string。 三、总结 综上所述。我们首选vectorchar作为输入缓冲区。 参考 What is the advantage of using vectorchar as input buffer over char array? How do I use vector as input buffer for socket in C A more elegant way to use recv() and vectorunsigned char What are differences between std::string and std::vectorchar?
http://www.yingshimen.cn/news/33527/

相关文章:

  • 建站宝盒完成网站的建设工作总结
  • 冀州网站制作企业如何申请网址
  • 南通优化网站价格如何用ps做网站界面
  • 台州网站建设方案推广建设网站毕业设计
  • 福州网上商城网站建设安徽电子健康卡小程序
  • 赣州做网站找谁汕尾网站设计
  • 网站seo快速饮品网页设计图片
  • Wordpress导出成word网站建设一条龙全包seo
  • 做网站前端难吗我想自己在网站上发文章 怎样做
  • 外包服务平台网站建立好了自己怎么做优化
  • 公众号里原文单发到dede网站上做网站有前景吗
  • 网站教学视频自己建网站收费吗
  • 福州网站建设效果网站怎么做下载网页代码
  • 网页制作制作网站下载手机微信
  • 韩国有哪些专业做汽车的网站百度安装到桌面
  • 技术社区网站开发例子原生h5网站怎么做
  • 厦门跨境建站平台制作游戏需要学什么
  • 天津网站建设中心怎么开发手机app
  • 事业单位网站备案域名ip查询入口官网
  • 网站死链怎么删除做网站自己买服务器
  • 个人网站开发的意义服务好的企业建站
  • 学校网站设计论文软件开发怎么自学
  • 住房城乡建设部门户网站主页微信小程序开店怎么弄
  • 钢格板保定网站建设技术支持上海网站建设
  • 营销型网站的建设软文网站开发的基本流程
  • 做国外的网站苏州网站开发外包公司
  • 开发网站费用怎么做蛋糕店的网站
  • 网站首页设计欣赏wordpress page 2
  • 公司网站怎么做实名认证网站外连
  • 网站空间需要续费企业网站服务器选择