最近在做一个通过mqtt接入云平台的项目时,被一个问题折磨了好久,为此写下这篇文章记录一下。
我的任务是要将dht11获得到的温湿度数据写进一个JSON格式的字符串里面,自此开始我的写bug之路。
因为要将添加了数据的的字符串写进一个特定的结构体(结构体里有一个char *的成员)里面,通过一个调用一个api将将结构体里的信息发布到云平台。一开始我的想法竟然是字符串不能直接用=赋值,我就直接调用了memset给结构体里的成员赋值,不出意外,栈溢出了。
原因:char *str=“hello world”
这样初始化的字符串的内容不能修改,原因是其指向的是常量字符串,常量不可以修改
正确做法:直接将新的字符串的地址传给str,即字符串名
上面我所说的利用memset修改的字符串其初始化应是这样的:
char str[]=“hello world”,同时在使用memset时应该注意数组长度,不然也容易造成栈溢出