将char指针存储到容器中

时间:2018-08-25 23:29:43

标签: c++ c++11 c++14 c++17

我正尝试存储一个char*,该位置会定期更新。

我需要将其指向的数据存储在c ++中的容器中

我尝试使用char* vector ,但是所有元素都指向最后更新的char*

这是我的代码:

std::vector<const char*>Packets;
char* Packet;
void __declspec (naked) RecvCaller()
{
    __asm mov ecx, [ebp + 0x08]
    __asm mov Packet, ecx
    Packets.push_back(Packet);
    __asm jmp dwJmpBack
}

我怎么能做到这一点?

2 个答案:

答案 0 :(得分:2)

我不认为您要存储指向Packet的指针,而是要存储Packet本身。

因此,您需要构造一个数据包向量,创建一个新的向量元素并将指向的数据复制到该向量元素中。

因此,假设您有一个cPacket类,该类具有一个带char指针的构造函数,那么您可以编写

class cPacket {
public:
cPacket( char* p )
{
// code to copy the data into attributes
...
}
};


std:vector< cPacket > vPacket;

...

vPacket.push_back( cPacket( Packet ) );

或者,如果您的其余代码期望指针向量

std::vector< cPacket* > vpPacket;

...

vpPacket.push_back( new cPacket( Packet ) );

答案 1 :(得分:1)

您可以将char *放入向量中。也许您正在其他代码中更改Packet的值?这是一个简单的例子。

#include <iostream>
#include <vector>


int main(int argc, char* argv[])
{
   char * ptr;

   char a[] = "first";
   char b[] = "second";
   char c[] = "third";


   std::vector<char const *> v;
   ptr = a;
   v.push_back(ptr);
   ptr = b;
   v.push_back(ptr);
   ptr = c;
   v.push_back(ptr);
   for(auto const & element:v)
   {
    std::cout << element << std::endl;
   }
}

如果后续代码更改了a,b或c,则存储的char *当然会反映出更改。

正如@ravenspoint指出的那样,也许您想制作Packet的完整副本并将其存储在向量中而不是指针中。