由于必须将一些数据传递给相当过时的 API,我正在尝试将 a 转换std::string
为(复制而不是强制转换)。char*
从表面上看,有很多方法可以做到这一点,但有人建议我将其作为一个似乎明智的矢量来做。但是,当我尝试这样做时,结果是乱码。代码如下:
const string rawStr("My dog has no nose.");
vector<char> str(rawStr.begin(), rawStr.end());
cout << "\"" << (char*)(&str) << "\"" << endl;
(请注意令人不快的 C 转换 - 使用 static_cast 不起作用,这可能告诉我一些事情)
当我运行它时,我得到:
"P/"
显然不对。我看了一下gdb中的向量
(gdb) print str
$1 = std::vector of length 19, capacity 19 = {77 'M', 121 'y', 32 ' ', 100 'd', 111 'o',
103 'g', 32 ' ', 104 'h', 97 'a', 115 's', 32 ' ', 110 'n', 111 'o', 32 ' ', 110 'n',
111 'o', 115 's', 101 'e', 46 '.'}
尽管最后没有空终止符,但这看起来是正确的,这是令人担忧的。向量 ( sizeof(str)
) 的大小为 24,这表明字符被存储为 8 位。
我哪里错了?