std::string使用很方便,但有时会碰到这样的问题,比如我们有一个结构体,内容如下所示:
typedef struct _datainfo
{
int i;
unsigned time;
} DATAINFO;
DATAINFO stInfo;
stInfo.i = 10;
stInfo.time = time(NULL);
如果要把这个结构体的内容保存到一个string,通常的作法是什么呢?
char buf[512];
string strData;
memcpy(char*(buf), (char *)&stInfo, sizeof(stInfo));
strData = string((char *)buf);
其实我们忽略了一点,就是string也是用char *来保存数据内容的,而c_str()接口就返回了这个头指针。与普通的字符串不同的是,它的长度并不是以/0结尾去判断的,而是通过成员变量里的size决定的,知道了这一样,我们就可以把string当char *来使用了。
string strData;
strData.resize(sizeof(stInfo));
memcpy((char *)strData.c_str(), (char *)&stInfo, sizeof(stInfo));
这样就可以实现了,知道了这一点,我们就可以用string干更多的事情,要注意的就是在每次内容修改之前,要进行resize成新的大小。