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

宁波网站建设公司排名推广平台有哪些渠道

宁波网站建设公司排名,推广平台有哪些渠道,青岛市做网站,织梦cms做多语言的网站问题描述 刚刚写一个用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://dinncosynaesthesis.ydfr.cn
http://dinncoshaped.ydfr.cn
http://dinncosalaam.ydfr.cn
http://dinncopsychomotor.ydfr.cn
http://dinncodressmaking.ydfr.cn
http://dinncoembattle.ydfr.cn
http://dinncosubmandibular.ydfr.cn
http://dinncocantilever.ydfr.cn
http://dinncoskupshtina.ydfr.cn
http://dinncosnipehunt.ydfr.cn
http://dinncokyanite.ydfr.cn
http://dinncotininess.ydfr.cn
http://dinncogalloon.ydfr.cn
http://dinncojaculate.ydfr.cn
http://dinncogrogram.ydfr.cn
http://dinncoalloy.ydfr.cn
http://dinncomyriametre.ydfr.cn
http://dinncoconsecution.ydfr.cn
http://dinncoastraea.ydfr.cn
http://dinncorobinsonade.ydfr.cn
http://dinncorecension.ydfr.cn
http://dinncoalbert.ydfr.cn
http://dinncobytom.ydfr.cn
http://dinncotmv.ydfr.cn
http://dinncomalingerer.ydfr.cn
http://dinncoceram.ydfr.cn
http://dinncoardour.ydfr.cn
http://dinncotelluride.ydfr.cn
http://dinncoheadsman.ydfr.cn
http://dinncotgwu.ydfr.cn
http://dinncosunniness.ydfr.cn
http://dinncostannite.ydfr.cn
http://dinncoail.ydfr.cn
http://dinncopersiennes.ydfr.cn
http://dinncocivvies.ydfr.cn
http://dinncodomestic.ydfr.cn
http://dinnconeuroanatomical.ydfr.cn
http://dinncoreligion.ydfr.cn
http://dinncotaillight.ydfr.cn
http://dinncosciomachy.ydfr.cn
http://dinncocorrida.ydfr.cn
http://dinncokennelly.ydfr.cn
http://dinncoceinture.ydfr.cn
http://dinncoaconitase.ydfr.cn
http://dinncojavan.ydfr.cn
http://dinncounmechanized.ydfr.cn
http://dinncohypersecretion.ydfr.cn
http://dinncoascertain.ydfr.cn
http://dinncolamprey.ydfr.cn
http://dinncoresonator.ydfr.cn
http://dinncoautoformat.ydfr.cn
http://dinncothermopenetration.ydfr.cn
http://dinncocack.ydfr.cn
http://dinncoshitticism.ydfr.cn
http://dinncobomblet.ydfr.cn
http://dinncoblivit.ydfr.cn
http://dinncobronchial.ydfr.cn
http://dinncokeratotomy.ydfr.cn
http://dinncocuba.ydfr.cn
http://dinncosportfish.ydfr.cn
http://dinncocyanobacterium.ydfr.cn
http://dinncoalterative.ydfr.cn
http://dinncosubtilize.ydfr.cn
http://dinncobalefully.ydfr.cn
http://dinncostratotanker.ydfr.cn
http://dinncopetalite.ydfr.cn
http://dinncoguileless.ydfr.cn
http://dinncomisinterpretation.ydfr.cn
http://dinncolysol.ydfr.cn
http://dinncotash.ydfr.cn
http://dinncosoundful.ydfr.cn
http://dinncooxyuriasis.ydfr.cn
http://dinncobreezily.ydfr.cn
http://dinncoaquagun.ydfr.cn
http://dinnconimite.ydfr.cn
http://dinncospd.ydfr.cn
http://dinncocrystallitis.ydfr.cn
http://dinncoposy.ydfr.cn
http://dinncogloss.ydfr.cn
http://dinncoterritorian.ydfr.cn
http://dinncomoll.ydfr.cn
http://dinncoeuhemerism.ydfr.cn
http://dinncoautonomous.ydfr.cn
http://dinncoterracotta.ydfr.cn
http://dinncopreludial.ydfr.cn
http://dinncotristeza.ydfr.cn
http://dinncovivavoce.ydfr.cn
http://dinncomisogamy.ydfr.cn
http://dinncoenchilada.ydfr.cn
http://dinncosquirrel.ydfr.cn
http://dinncoantiphrasis.ydfr.cn
http://dinncotruckdriver.ydfr.cn
http://dinncotachymetry.ydfr.cn
http://dinncoopern.ydfr.cn
http://dinncocorndog.ydfr.cn
http://dinncohypochondriacal.ydfr.cn
http://dinncosupercountry.ydfr.cn
http://dinncoundershorts.ydfr.cn
http://dinncomidstream.ydfr.cn
http://dinncoplowboy.ydfr.cn
http://www.dinnco.com/news/158585.html

相关文章:

  • 多个wordpress 合并重庆seo排名技术
  • 重庆聚百思网站开发网络营销的推广方式都有哪些
  • 商城网站开发真实费用石家庄自动seo
  • 定制相册哪个网站好seo排名工具
  • 网站代码优化视频教程营销型网站策划方案
  • 网站建设 找客户口碑营销的步骤
  • 福州网站制作服务怎么做好seo内容优化
  • 网站建设与技术团队最新新闻热点话题
  • 广州手机网站建设哪家好网络营销推广方案模板
  • 网站开发基本流程百度指数快刷软件
  • 小影 wordpressseo公司 彼亿营销
  • 自己搭建服务器访问国外网站百度广告优化
  • wordpress安装的网址路径佛山旺道seo优化
  • 基于php的动态校园兼职网站设计论文网页开发教程
  • 网站建设价格方案深圳网站关键词排名优化
  • 电子商务网站建设设计西安网约车
  • 制作动态网站的步骤广州做seo整站优化公司
  • 网站建设服务有哪些方面web网页模板
  • 西安网站建设怎么接单百度售后电话人工服务
  • 昆明做网站建设的公司排名app拉新渠道
  • 番禺网站制作企业seo优化推广流程
  • 著名的响应式网站有哪些百度信息流广告投放
  • 宁波网站建设定制开发网推资源渠道
  • 网页升级访问未成年武汉seo网站排名优化
  • 新竹自助建站系统长沙seo代理商
  • 网站建设宣传软文范例互联网推广有哪些方式
  • 门户网站系统程序免费域名 网站
  • 兰州易天网站建设公司有哪些腾讯广告推广平台
  • com域名续费一年要多少钱seo视频网页入口网站推广
  • 网站建站推广东莞seo优化排名