Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/150.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++/CX-我需要将一个Platform::String传递到一个接受常量char*的方法中?_C++_Sqlite_Windows 8_Windows Runtime_C++ Cx - Fatal编程技术网

C++ C++/CX-我需要将一个Platform::String传递到一个接受常量char*的方法中?

C++ C++/CX-我需要将一个Platform::String传递到一个接受常量char*的方法中?,c++,sqlite,windows-8,windows-runtime,c++-cx,C++,Sqlite,Windows 8,Windows Runtime,C++ Cx,我有一个SQLite包装类,它要求您以const char*的形式传入数据库名称,但是我只有Platform::String(在进行文件搜索之后)的形式传入数据库名称 我似乎找不到办法将Platform::String转换为const char* 我看到了关于StackOverflow的另一个问题,解释了为什么它不是直截了当的,但没有示例代码或端到端解决方案 有人能帮我吗 谢谢免责声明:我对C++/CX知之甚少,我的答案基于文档 String类包含16位Unicode字符,因此无法直接获取指向8

我有一个SQLite包装类,它要求您以
const char*
的形式传入数据库名称,但是我只有
Platform::String
(在进行文件搜索之后)的形式传入数据库名称

我似乎找不到办法将
Platform::String
转换为
const char*

我看到了关于StackOverflow的另一个问题,解释了为什么它不是直截了当的,但没有示例代码或端到端解决方案

有人能帮我吗


谢谢

免责声明:我对C++/CX知之甚少,我的答案基于文档

String
类包含16位Unicode字符,因此无法直接获取指向8位
char
类型字符的指针;您需要转换内容

如果已知字符串仅包含ASCII字符,则可以直接转换:

String s = whatever();
std::string narrow(s.Begin(), s.End());
function_requiring_cstring(narrow.c_str());
否则,字符串将需要翻译,这将变得相当复杂。以下操作可能是正确的,将宽字符转换为窄字符的多字节序列:

String s = whatever();
std::wstring wide(s.Begin(), s.End());
std::vector<char> buffer(s.Length()+1);  // We'll need at least that much
for (;;) {
    size_t length = std::wcstombs(buffer.data(), wide.c_str(), buffer.size());
    if (length == buffer.size()) {
        buffer.resize(buffer.size()*2);
    } else {
        buffer.resize(length+1);
        break;
    }
}
function_requiring_cstring(buffer.data());
String s=whatever();
std::wstring宽(s.Begin(),s.End());
std::向量缓冲区(s.Length()+1);//我们至少需要这么多
对于(;;){
size_t length=std::wcstombs(buffer.data()、wide.c_str()、buffer.size());
if(长度==缓冲区.size()){
buffer.resize(buffer.size()*2);
}否则{
调整缓冲区大小(长度+1);
打破
}
}
函数需要字符串(buffer.data());
或者,您可能会发现忽略Microsoft关于如何处理字符串的想法更容易,而使用
std::string

一些帮助