这是一个基本的理解概念相关的问题。
使用:Embarcadero C++ Builder
有什么区别:
opendir("C:\\XYZ")
和
String file = "C:\\XYZ";
opendir(file);
不是两个字符串吗?第一个有效,但 sexond 给了我错误:E2034 Cannot convert Unicode String to 'const char*'
在我从用户那里获取输入的情况下,我只能传递一个字符串。我如何通过整个路径?
这是一个基本的理解概念相关的问题。
使用:Embarcadero C++ Builder
有什么区别:
opendir("C:\\XYZ")
和
String file = "C:\\XYZ";
opendir(file);
不是两个字符串吗?第一个有效,但 sexond 给了我错误:E2034 Cannot convert Unicode String to 'const char*'
在我从用户那里获取输入的情况下,我只能传递一个字符串。我如何通过整个路径?
第一个是 a const char*
,第二个是 std::string。该opendir
函数仅const char*
在您的情况下接受,因此无法自行std::string
转换const char*
。您可以通过opendir(file.c_str());
.
不,String 不是 char 数组。opendir 需要一个 char 数组。
opendir()
期望 8 位窄const char*
作为输入。当您将狭窄的文字传递给 时opendir()
,您将传递给它 a const char[]
,它隐式降级为const char*
,一切都很好。
String
is System::String
,它是 的 typedef System::UnicodeString
,它是 Embarcadero 的 UTF-16 编码字符串类(类似于std::wstring
,但语义不同)。当你传递一个String
to 时opendir()
,你会得到一个转换错误。
要将String
值传递给opendir()
(或任何其他期望的函数char*
),您需要先将其转换为 a System::AnsiString
,然后用于AnsiString::c_str()
从中获取 a char*
,例如:
String file = "C:\\XYZ";
opendir(AnsiString(file).c_str());