C++ 为什么缓冲区的输出没有打印?
祝你新年快乐 我有一种我不理解的行为 我试图用一些数据填充一个缓冲区,当我打印缓冲区时,什么也不打印 下面是我的代码:C++ 为什么缓冲区的输出没有打印?,c++,C++,祝你新年快乐 我有一种我不理解的行为 我试图用一些数据填充一个缓冲区,当我打印缓冲区时,什么也不打印 下面是我的代码: uint8_t* buffer[50]; std::size_t pos = 0; int cpt = 0; while(pos < line.size()) { std::size_t index = line.find(str, pos); if(pos != std::string::npos) { string temp = line
uint8_t* buffer[50];
std::size_t pos = 0;
int cpt = 0;
while(pos < line.size())
{
std::size_t index = line.find(str, pos);
if(pos != std::string::npos)
{
string temp = line.substr(index,4);
std::vector<uint8_t> myVector(temp.begin(), temp.end());
uint8_t *p = &myVector[0];
buffer[cpt] = (uint8_t*)p;
std::cout << "Buffer[cpt] : " << buffer[cpt] << std::endl;
cpt = cpt + 1;
}
pos = index + 4;
std::cout << "buffer[0] : " << buffer[0] << std::endl;
}
for (int i=0; i < cpt; i++)
{
std::cout << "Buffer : " << buffer[i] << std::endl;
}
uint8_t*缓冲区[50];
标准:尺寸\u t位置=0;
int-cpt=0;
而(位置 std::cout您正在为一个向量保存数据的地址,然后该向量被销毁。这会导致在稍后调用printbuffer[0]
和buffer[i]
时出现未定义的行为
如果首先使用向量,为什么需要原始uint8\u t*
数组
{
string temp = line.substr(index,4);
std::vector<uint8_t> myVector(temp.begin(), temp.end());
uint8_t *p = &myVector[0];
buffer[cpt] = (uint8_t*)p;
std::cout << "Buffer[cpt] : " << buffer[cpt] << std::endl;
cpt = cpt + 1;
} // myVector is destructed here
pos = index + 4;
std::cout << "buffer[0] : " << buffer[0] << std::endl;
// buffer[0] points to memory allocated by
// myVector that has now been released, undefined behavor.
{
字符串温度=行substr(索引,4);
std::vector myVector(temp.begin(),temp.end());
uint8_t*p=&myVector[0];
缓冲区[cpt]=(uint8_t*)p;
std::cout您正在为一个向量保存数据的地址,然后该向量被销毁。这会导致在稍后调用printbuffer[0]
和buffer[i]
时出现未定义的行为
如果首先使用向量,为什么需要原始uint8\u t*
数组
{
string temp = line.substr(index,4);
std::vector<uint8_t> myVector(temp.begin(), temp.end());
uint8_t *p = &myVector[0];
buffer[cpt] = (uint8_t*)p;
std::cout << "Buffer[cpt] : " << buffer[cpt] << std::endl;
cpt = cpt + 1;
} // myVector is destructed here
pos = index + 4;
std::cout << "buffer[0] : " << buffer[0] << std::endl;
// buffer[0] points to memory allocated by
// myVector that has now been released, undefined behavor.
{
字符串温度=行substr(索引,4);
std::vector myVector(temp.begin(),temp.end());
uint8_t*p=&myVector[0];
缓冲区[cpt]=(uint8_t*)p;
std::在这里可能不是问题,但仍然值得一提:在任何具有uint8\u t
的平台上,它将基于char
。任何基于char
的数组或指针都将被视为以空结尾的字符串。指针在缓冲区中是否以空结尾的字符串?如果您想处理字符串并使结果成为字符串,然后在任何地方使用std::string
。如果您不知道buffer
数组的最终大小,则使用std::vector
。因此您可能应该使用std::vector buffer;
。不,缓冲区中的指针不是以null结尾的。然后,您不能使用标准我正在使用int8_t类型,因为我使用一个填充了硬代码值(值是十六进制值)的uint8_t缓冲区进行了一些测试,然后通过TCP套接字发送这个缓冲区,它就可以工作了。现在,我想做同样的事情,但我想读取一个包含十六进制值的文件(例如0x01、0x02、0x03、0x04)然后将它们全部添加到一个缓冲区中发送。老实说,我不知道是否有更简单的方法。这可能不是问题所在,但仍然值得一提:在任何具有uint8\t
的平台上,它将基于char
。任何基于char
的数组或指针都将被视为空项无效字符串。buffer
中的指针是否为以null结尾的字符串?如果要处理字符串并使结果为字符串,则在所有位置使用std::string
。如果不知道buffer
数组的最终大小,则使用std::vector
。因此,您可能应该使用std::vector buffer
。不,缓冲区中的指针不是以null结尾的。那么,您就不能使用标准的输出数据了。我正在使用int8\u t类型,因为我用一个填充了硬代码值(值是十六进制值)的uint8\u t缓冲区进行了一些测试然后通过TCP套接字发送这个缓冲区,它就可以工作了。现在,我想做同样的事情,但我想读取一个包含十六进制值的文件(例如0x01、0x02、0x03、0x04)然后将它们全部添加到一个缓冲区中发送。老实说,我不知道是否有更简单的方法。因为我读取一个文件并解析该文件以将数据放入缓冲区。我需要使用uint8_t类型作为缓冲区,因为我读取一个文件并解析该文件以将数据放入缓冲区。我需要使用uint8_t类型作为缓冲区