我对 C 字符串和宽 C 字符串有点困惑。为了这个问题,假设我使用 Microsoft Visual Studio 2010 Professional。如果我的任何信息不正确,请告诉我。
我有一个带有 const wchar_t* 成员的结构,用于存储名称。
struct A
{
const wchar_t* name;
};
当我为对象'a'分配一个名称时:
int main()
{
A a;
const wchar_t* w_name = L"Tom";
a.name = w_name;
return 0;
}
那只是将 w_name 指向的内存地址复制到 a.name 中。现在 w_name 和 a.name 都是指向内存中相同地址的宽字符指针。
如果我是正确的,那么我想知道如何处理这种情况。我正在使用 tinyxml2 从 XML 属性中读取 C 字符串。
tinyxml2::XMLElement* pElement;
// ...
const char* name = pElement->Attribute("name");
获得 C 字符串后,我将其转换为宽字符串,如下所示:
size_t newsize = strlen(name) + 1;
wchar_t * wcName = new wchar_t[newsize];
size_t convertedChars = 0;
mbstowcs_s(&convertedChars, wcName, newsize, name, _TRUNCATE);
a.name = wcName;
delete[] wcName;
如果到目前为止我是正确的,那么该行:
a.name = wcName;
只是将数组 wcName 的第一个字符的内存地址复制到 a.name 中。但是,我在分配此指针后直接删除 wcName,这将使其指向垃圾。
如何将我的 C 字符串转换为宽字符 C 字符串,然后将其分配给 a.name?