有一个结构体,其中有一个 const char* 作为成员变量。
typedef struct WWCryptoAuthorizationHeader
{
int age;
const char *name;
const char *address;
} StudentInfo;
我可以使用 std::map 值动态更改结构体的成员变量吗?
我试试这个..
void foo(StudentInfo *studentInfo, const char* key)
{
std::map<std::string, const char*> studentInfoMap;
studentInfoMap.insert(std::make_pair("name", studentInfo->name));
studentInfoMap.insert(std::make_pair("address", studentInfo->address));
for(auto &item : studentInfoMap)
{
if (strcmp(key, item.first.c_str()) == 0)
{
item.second = "John";
}
}
}
你能帮我吗?
您将 char*
指针的
copy存储在
map
中,因此您无法更新 StudentInfo
结构中的原始指针。 您必须使用额外的间接级别,如下所示:
void foo(StudentInfo *studentInfo, const char* key)
{
std::map<std::string, const char**> studentInfoMap;
studentInfoMap.insert(std::make_pair("name", &(studentInfo->name)));
studentInfoMap.insert(std::make_pair("address", &(studentInfo->address)));
for(auto &item : studentInfoMap)
{
if (strcmp(key, item.first.c_str()) == 0)
{
*(item.second) = "John";
}
}
}
话虽如此,
for
循环是不必要的:
void foo(StudentInfo *studentInfo, const char* key)
{
std::map<std::string, const char**> studentInfoMap;
studentInfoMap.insert(std::make_pair("name", &(studentInfo->name)));
studentInfoMap.insert(std::make_pair("address", &(studentInfo->address)));
*(studentInfoMap[key]) = "John";
// or
*(studentInfoMap.at(key)) = "John";
}