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