将std :: vector <char>转换为char *会导致有缺陷的字符

Dan*_*el. 1 c++ vector char

我的代码中有一个函数,该函数buildPacket需要一些参数,然后将它们转换为a char*,并使用a将它们加在一起std::vector<char>,最后将结果返回为a char*。问题是我将向量转换为a后,char*所有字符都变成了怪异字符。

我尝试使用其他方法将向量转换为a char*,例如使用reinterpret_cast<char*>。当我从函数内部打印向量的内容时,我得到了预期的结果,所以问题出在转换上。

该函数的代码:

char* buildPacket (int code, std::string data)
{
    char* codeBytes = CAST_TO_BYTES(code);
    std::vector<char> packetBytes(codeBytes, codeBytes + sizeof(char));
    size_t dataLength = data.size() + 1;
    char* dataLengthBytes = CAST_TO_BYTES(dataLength);
    packetBytes.insert(packetBytes.end(), dataLengthBytes, dataLengthBytes + sizeof(int));
    const char* dataBytes = data.c_str();
    packetBytes.insert(packetBytes.end(), dataBytes, dataBytes + dataLength);

    return &packetBytes[0];
}
Run Code Online (Sandbox Code Playgroud)

CAST_TO_BYTES宏:

#define CAST_TO_BYTES(OBJ) static_cast<char*>(static_cast<void*>(&OBJ));
Run Code Online (Sandbox Code Playgroud)

该功能的目的是获取输入并从中构建数据包,以便稍后通过套接字发送,该数据包的格式包括1个字节长的代码,4个字节长的数据长度和可变长度的数据。

输入我给它code = 101data = "{\"password\":\"123456\",\"username\":\"test\"}"

这是打印字符时得到的结果: ????????????????????????????????????????????????

编辑:感谢您的所有帮助,我已vector<char>按照建议在结尾处返回了a ,并采取了另一种方法将值转换为char*

Med*_*noc 5

您正在返回一个指向局部变量内部的指针。您应该更改代码以使函数vector<char>之外的buildPacket功能还活着(例如,通过返回它而不是char*)。