我有一个函数,它接受一个名为arrayOfStrings的参数,定义如下:
const TCHAR* arrayOfStrings[] = { L"Test" };
现在,我想将字符串转换为上面的类型,但是我不知道如何。 This link提供了一种将字符串转换为tchar而不是const tchar *的解决方案。 This other link显示了如何将字符串转换为tchar *,而不是const tchar *,第二种解决方案对我来说是内存分配的问题。您可能会说,我对c ++还是很陌生,所以任何教育技巧也将不胜感激。
答案 0 :(得分:0)
一种适用于所有C ++标准的简单方法是
#include <string>
#include <windows.h> // or whatever header you're using that specifies TCHAR
int main()
{
std::string test("Hello"); // string to be converted
// first, if you need a const TCHAR *
std::basic_string<TCHAR> converted(test.begin(), test.end());
const TCHAR *tchar = converted.c_str();
// use tchar as it is in the required form (const)
// second, if you need a TCHAR * (not const)
std::vector<TCHAR> converted2(test.begin(), test.end());
TCHAR *tchar2 = &converted2[0];
// use tchar2 as it is of the required form (non-const).
}
std::basic_string
并非在所有C ++标准中都提供一种获取非const
指向其数据的指针的方法,但是std::vector
可以提供。 (假设您没有使用显式转换来引入或消除const
的本质)。
在C ++ 17和更高版本中,事情变得更简单:basic_string::data()
同时具有const
和非const
重载,这在2017年标准之前不是这种情况。在C ++ 11之前,标准不保证basic_string
中的数据是连续的(即使实现通常以这种方式实现),但是c_str()
确实提供了a的第一个字符的地址。连续数组。最终结果是,在C ++ 17和更高版本中,可以使用basic_string::data()
或basic_string::c_str()
的适当重载,而无需强制转换来更改const
的性质,并且无需诉诸于vector
(在所有C ++标准中都保证具有连续的元素)。
两种情况下的注意事项
tchar
和tchar2
的各自容器(converted
或converted2
)的大小已调整或不再存在,则它们将无效。例如,如果tchar
超出范围,则不要使用converted
指向的数据,因为指向数据的tchar
不再存在。