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

iis网站视频无法播放wordpress淘宝i主题

iis网站视频无法播放,wordpress淘宝i主题,wordpress后台代码修改,个人简历网官网免费问题描述 刚刚写一个用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://www.15wanjia.com/news/166696.html

相关文章:

  • 网站开发和软件开发哪个难怎么做区块链媒体网站
  • 平凉市建设局门户网站学校资源网站 建设方案
  • 打不开网站怎么办化妆品网站建设经济可行性分析
  • 北京网站设计联系电话域名服务器ip
  • 网页和网站做哪个好用wordpress 3.5 基础教程
  • 维护一个网站做360手机网站快速排
  • 在dw上做网站首页导航栏行情网免费网站大全
  • 上海网站建设网页设计凡科建站快车
  • jquery 案例网站市场营销具体是做什么的
  • 深圳网站设计 公司南宁 建网站 公司
  • 黄石网站设计制作网站做实名验证码
  • 网站标题如何写WordPress文章固定连接html
  • 仿做网站机关网站建设需求文档
  • 微企业网站模板免费无锡网站制作平台
  • 阿里云主机 多个网站服务好的成都网站建设
  • 禹城做网站珠海做网站的网络公司
  • 58同城类型网站制作响应式外贸建站
  • 中国移动官方网站登录入口专门做美食的网站6
  • 惠州网站建设多少钱怎么查看一个网站的浏览量
  • 无忧网站建设哪家好网络公司给我做网站我有没有源代码版权吗
  • 文库网站开发建设昆明网站seo多少钱
  • 国外做的好的医疗网站云南又出现一例
  • 网站建设 - 碧诺网络网站没有收录
  • 关键词库在网站上怎么体现国内做的较好的网站
  • 网站如何优化流程wordpress登录插件
  • 承德网站建设案例网站焦点图如何美观
  • 神农架网站制作建设手机网站培训教程
  • 如何设计制作一般企业网站网站开发教程收费版
  • 网络营销网站电子商务网站建设与实践
  • 团购网站建设公司wordpress cookie失效