gpt4 book ai didi

c++ - 结构值在 C++ 中未正确打印

转载 作者:太空宇宙 更新时间:2023-11-04 16:14:59 25 4
gpt4 key购买 nike

我有一个字符串消息,我正在拆分字符串并将其存储在一个结构中。

 struct logMessage
{
int cefVersion;
char *deviceVendor;
char *deviceProduct;
char *deviceVersion;
int signatureID;
char *eventName;
int severity;
char *objectIp;
char *cs2;
char *suser;
int logonID;
char *logonType;
};

我已经拆分了字符串并将其存储在结构中我的代码是这样的。

'split(string str)
{
string logmsg=str;
logMessage lmsg;
string delimiter = "|";
size_t pos = 0;
string token;
int tokens=1;
while ((pos = logmsg.find(delimiter)) != string::npos) {
token = logmsg.substr(0, pos);
cout <<"\n"<< token <<endl;
logmsg.erase(0, pos + delimiter.length());

switch(tokens){

case 1:lmsg.cefVersion=atol((char *)token.c_str());
cout<<"\t token="<<token.c_str();
break;
case 2:lmsg.deviceVendor=(char *)token.c_str();
cout<<"\t token="<<token.c_str()<<"\tlmsg.deviceVendor="<<lmsg.deviceVendor;
cout<<"\nmessage stored in the sturcture=deviceVendor:"<<lmsg.deviceVendor;
break;
case 3:lmsg.deviceProduct=(char *)token.c_str();
cout<<"\nmessage stored in the sturcture=deviceProduct:"<<lmsg.deviceProduct;
cout<<"\t token="<<token.c_str()<<"\tlmsg.deviceProduct="<<lmsg.deviceProduct;break;
case 4:lmsg.deviceVersion=(char *)token.c_str();
cout<<"\t token="<<token.c_str();break;
case 5:lmsg.signatureID=atol((char *)token.c_str());
cout<<"\t token="<<token.c_str();break;
case 6:lmsg.eventName=(char *)token.c_str();
cout<<"\t token="<<token.c_str();break;
case 7:lmsg.severity=atol((char *)token.c_str());
cout<<"\t token="<<token.c_str();break;

}

tokens++;
cout<<"\ntokens="<<tokens;
//#cout<<"\nmessage stored in the sturcture=deviceProduct:"<<lmsg.deviceProduct;
}

//#cout<<"\nmessage stored in the sturcture=cefVersion:"<<lmsg.cefVersion;
//#cout<<"\nmessage stored in the sturcture=deviceProduct:"<<lmsg.deviceProduct;


//#cout<<"\nmessage stored in the sturcture=signatureID:"<<lmsg.signatureID;
//cout<<"\nmessage stored in the sturcture=eventName:"<<lmsg.eventName;
//cout<<"\nmessage stored in the sturcture=severity:"<<lmsg.severity;
logmsg=str;
std::cout << logmsg << std::endl;
}'

在上面的代码中,注释掉的 # 行没有正常工作,它正在打印一些其他值。除了这个一切都工作正常我不明白为什么会这样。

最佳答案

c_str() 没有分配新的存储空间。文档说“返回的指针可能会因进一步调用修改对象的其他成员函数而失效。”

即,每次将 token 重新分配给时,您已经存储在结构中的 char* 将指向任何内容。

当你填充它时,你需要为每个结构字段分配一个新的 char* 字符串,并从 token.c_str() strcpy 到它。

关于c++ - 结构值在 C++ 中未正确打印,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23646198/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com