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您正在为一个向量保存数据的地址,然后该向量被销毁。这会导致在稍后调用print
buffer[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您正在为一个向量保存数据的地址,然后该向量被销毁。这会导致在稍后调用print
buffer[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类型作为缓冲区