这是一个基本的理解概念相关的问题。
使用: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*,一切都很好。
Stringis System::String,它是 的 typedef System::UnicodeString,它是 Embarcadero 的 UTF-16 编码字符串类(类似于std::wstring,但语义不同)。当你传递一个Stringto 时opendir(),你会得到一个转换错误。
要将String值传递给opendir()(或任何其他期望的函数char*),您需要先将其转换为 a System::AnsiString,然后用于AnsiString::c_str()从中获取 a char*,例如:
String file = "C:\\XYZ";
opendir(AnsiString(file).c_str());