1、问题描述
最近工作中遇到一个问题:
fw -hidl -hal-fdbus-qnx
java:fw
C++:hal qnx
1、首先这个通路是支持设置数据,设置的数据保存在qnx的某模块,这里就简单写qnx。也支持获取数据,获取的数据是从qnx。
2、fw通过hal获取qnx里面的一个字符串version。
fw hal设置数据下去的打印的version:“123456789”。长度9。qnx的log打印version:“123456789”,没有长度打印。
3、然后获取字符串version时,fw 的log打印是version:“123456789À€À€7”,长度12;hal的log打印是version:“123456789”。长度12。qnx的log打印version:“123456789”,没有长度打印。
2、问题分析
1、一开始的时候一直不太理解为啥,获取字符串时,hal的log打印是version:“123456789”,长度12。qnx的log打印version:“123456789”。hal层只是透传数据,从qnx收到string类型,透传给fw的也是string类型,中间没有其他数据处理,为什么长度12和实际长度不匹配,这个最后可以讲下理由,这里先不分析。
2、长度12是不符合期待值得长度9。设置多长,获取的长度应该是一样的,从这里定位问题是在qnx。
3、查看qnx相关模块的代码,定位问题到:
设置version值,对值进行保存的地方。saveVersion是
保存version的变量,获取version时返回就时saveVersion 的内容。
saveVersion = version;
问题在于:
给string字符串赋值一个带空字符的字符串,然后后面又重新赋值一个不带空字符的字符串,此时这个string字符串是包含空字符还是不包含呢?为什么?
**答:**当你给一个 string 变量赋值一个带空字符的字符串时,它会将整个字符串(包括空字符)复制到变量中。后面重新赋值一个不带空字符的字符串时,它只会替换原有字符串中非空字符的部分,而空字符仍然保留。因此,即使你重新赋值了一个不带空字符的字符串,原始的 string 变量仍然包含空字符。
例子:
#include <iostream>