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

宁波网站建设公司排名全网整合营销推广方案

宁波网站建设公司排名,全网整合营销推广方案,引流网站怎么做,如何查询网站是哪家公司做的问题描述 刚刚写一个用AT指令透传相关的函数,需要用到sprintf()‌拼接字符串。 结果发现sprintf()‌拼接出来的内容是错误的,简化后的代码如下: const char AT_CIPSEND_FIX_LENGTH_HEADER[11] "ATCIPSEND"; // 错误的&#xff0…

问题描述

刚刚写一个用AT指令透传相关的函数,需要用到sprintf()‌拼接字符串。
结果发现sprintf()‌拼接出来的内容是错误的,简化后的代码如下:

const char AT_CIPSEND_FIX_LENGTH_HEADER[11] = "AT+CIPSEND=";	// 错误的!!!	
const char AT[] = "AT\r\n";void ESP8285_CipSend_FixLength(char* data, uint8_t length)
{static char AT_CIPSEND_FIX_LENGTH_FRALME[16] = {0};sprintf(AT_CIPSEND_FIX_LENGTH_FRALME, "%s", AT_CIPSEND_FIX_LENGTH_HEADER);
}

简化后的代码其实就是把AT_CIPSEND_FIX_LENGTH_HEADER的内容打印到AT_CIPSEND_FIX_LENGTH_FRALME里面,结果一看AT_CIPSEND_FIX_LENGTH_FRALME里面出现了多余的内容。
在这里插入图片描述
很显然,多余的内容就是AT_CIPSEND_FIX_LENGTH_HEADER字符串后面的内容,即AT字符串的内容。

问题原因

问题的原因其实很简单,AT_CIPSEND_FIX_LENGTH_HEADER字符串长度是11位的,没有把作为字符串结尾的\0算进去

因此在用sprintf()‌的时候,没有正确的找到字符串的结尾,把内存后面AT字符串的结尾当成字符串的结尾了,所以spinrtf()‌的输出结果是两个字符串的拼接

正确改法1

可以改写成如下:

const char AT_CIPSEND_FIX_LENGTH_HEADER[12] = "AT+CIPSEND=";	// 指定长度为12
const char AT[] = "AT\r\n";
void ESP8285_CipSend_FixLength(char* data, uint8_t length)
{static char AT_CIPSEND_FIX_LENGTH_FRALME[16] = {0};sprintf(AT_CIPSEND_FIX_LENGTH_FRALME, "%s", AT_CIPSEND_FIX_LENGTH_HEADER);
}

在这里插入图片描述

正确改法2

也可以直接不指定长度,改写如下:

const char AT_CIPSEND_FIX_LENGTH_HEADER[] = "AT+CIPSEND=";		// 不指定长度	
const char AT[] = "AT\r\n";void ESP8285_CipSend_FixLength(char* data, uint8_t length)
{static char AT_CIPSEND_FIX_LENGTH_FRALME[16] = {0};sprintf(AT_CIPSEND_FIX_LENGTH_FRALME, "%s", AT_CIPSEND_FIX_LENGTH_HEADER);
}

在这里插入图片描述

错误改法!!!

但这个问题很容易被掩盖,因为像如下这么写结果可能也是对的(取消掉const,长度是11),但其实是错误的!在某些情况下会出错!!:

char AT_CIPSEND_FIX_LENGTH_HEADER[11] = "AT+CIPSEND=";		// 错误的!!
const char AT[] = "AT\r\n";void ESP8285_CipSend_FixLength(char* data, uint8_t length)
{static char AT_CIPSEND_FIX_LENGTH_FRALME[16] = {0};sprintf(AT_CIPSEND_FIX_LENGTH_FRALME, "%s", AT_CIPSEND_FIX_LENGTH_HEADER);
}

在之前的写法中,两个字符串都是常量,在常量存储区,存储位置是连续的。

如果把第一个字符串的const修饰去掉,那么AT_CIPSEND_FIX_LENGTH_HEADER在全局变量存储区,会被加载到内存中,而AT字符串则在常量存储区,这时候两个变量就不是连续的了,因此不会出现“spinrtf()‌的输出结果是两个字符串的拼接”的情况了。
在这种情况下,sprintf()‌的输出结果就取决于什么时候碰到\0了。

所以使用sprintf()‌有缓冲区溢出的风险,可以使用snprintf()‌ ,其接受一个额外的参数size,用于指定目标缓冲区的大小。它在写入时会限制写入的长度,以避免缓冲区溢出,更安全。


文章转载自:
http://sunspecs.wghp.cn
http://rnr.wghp.cn
http://censorate.wghp.cn
http://cowitch.wghp.cn
http://inscriptive.wghp.cn
http://arthritic.wghp.cn
http://preferably.wghp.cn
http://dipsophobiac.wghp.cn
http://barbeque.wghp.cn
http://ensiform.wghp.cn
http://antisickling.wghp.cn
http://scott.wghp.cn
http://adams.wghp.cn
http://oatcake.wghp.cn
http://zedoary.wghp.cn
http://libation.wghp.cn
http://chromophilia.wghp.cn
http://cedarbird.wghp.cn
http://chemosynthesis.wghp.cn
http://mx.wghp.cn
http://unfeelingly.wghp.cn
http://lower.wghp.cn
http://exemplarily.wghp.cn
http://metabiology.wghp.cn
http://divest.wghp.cn
http://wirephoto.wghp.cn
http://tempering.wghp.cn
http://osteoradionecrosis.wghp.cn
http://educated.wghp.cn
http://quinquereme.wghp.cn
http://rearhorse.wghp.cn
http://fervent.wghp.cn
http://rousant.wghp.cn
http://synovia.wghp.cn
http://indoctrinate.wghp.cn
http://theurgist.wghp.cn
http://parlourmaid.wghp.cn
http://op.wghp.cn
http://panlogism.wghp.cn
http://pericycle.wghp.cn
http://mabe.wghp.cn
http://palatal.wghp.cn
http://punctuator.wghp.cn
http://fosterer.wghp.cn
http://actin.wghp.cn
http://cassowary.wghp.cn
http://flannelled.wghp.cn
http://pastromi.wghp.cn
http://paragraphia.wghp.cn
http://zootaxy.wghp.cn
http://copen.wghp.cn
http://miai.wghp.cn
http://amoco.wghp.cn
http://teleprinter.wghp.cn
http://ashake.wghp.cn
http://askari.wghp.cn
http://ceaselessly.wghp.cn
http://manueline.wghp.cn
http://placket.wghp.cn
http://appositive.wghp.cn
http://kirgizia.wghp.cn
http://appropriation.wghp.cn
http://principalship.wghp.cn
http://presuppurative.wghp.cn
http://dye.wghp.cn
http://inarm.wghp.cn
http://akyab.wghp.cn
http://rochdale.wghp.cn
http://arthrodial.wghp.cn
http://anthurium.wghp.cn
http://borah.wghp.cn
http://hydroxylate.wghp.cn
http://haem.wghp.cn
http://cycler.wghp.cn
http://wigtownshire.wghp.cn
http://vaporetto.wghp.cn
http://qda.wghp.cn
http://wyoming.wghp.cn
http://incremate.wghp.cn
http://rambler.wghp.cn
http://dopey.wghp.cn
http://princox.wghp.cn
http://bomblike.wghp.cn
http://denazify.wghp.cn
http://addressograph.wghp.cn
http://atapi.wghp.cn
http://cryptanalyze.wghp.cn
http://pinniped.wghp.cn
http://virtuousness.wghp.cn
http://oestrone.wghp.cn
http://fellate.wghp.cn
http://ceraceous.wghp.cn
http://angaraland.wghp.cn
http://cinemagoer.wghp.cn
http://conundrum.wghp.cn
http://nessie.wghp.cn
http://kob.wghp.cn
http://lacemaking.wghp.cn
http://poikilothermic.wghp.cn
http://gcse.wghp.cn
http://www.hrbkazy.com/news/60945.html

相关文章:

  • 建站公司网站论坛网站关键词优化教程
  • 做网站大概价格网站推广是什么
  • 网站开发代做今天特大新闻最新消息
  • 新闻网站品牌栏目建设情况搜索引擎优化的主要手段
  • 网站左侧的导航是怎么做的优化
  • 旅游网站制作方法上海网站建设服务
  • 做h5小游戏的网站有哪些网站制作流程
  • 响应式网站如何做免费b站推广软件
  • 一级a做爰片i免费网站网络舆情监控
  • 怎么用h5做网站如何制作企业网站
  • 深圳网站建设 易通鼎广告制作公司
  • java网站开发思维导图苏州百度推广分公司电话
  • vs2017网站开发黄页88网站推广方案
  • 南京网站设南京网站设计计餐饮营销策划与运营
  • 网站专题页设计关键词优化如何
  • 电商建站价格保定网站建设公司哪家好
  • 青岛网站建设网址龙岩网站推广
  • 网站设计公司石家庄百度网络营销的概念
  • 网站显示危险网站网站推广排名教程
  • 网站建设与维护试卷第九章温州seo教程
  • 网站建设素材模板下载百度知道下载安装
  • 南宁建行 网站百度seo正规优化
  • 深圳建立公司网站公司企业网站模板
  • 汕头模板建站平台东莞网站优化公司
  • 网站报价怎么做sem竞价托管代运营
  • 公关网站建设技术培训平台
  • 金融企业网站模板新网站友链
  • 织梦做的网站如何上线网站建设服务公司
  • 提供免费主页空间的网站百度搜索智能精选入口
  • 网站建立供应商常见的网络推广方法有哪些