打开目录功能

时间:2012-06-15 02:45:12

标签: c++ string c++builder

这是一个基本理解概念的相关问题。

使用:Embarcadero C ++ Builder

有什么区别:

opendir("C:\\XYZ")

String file = "C:\\XYZ";
opendir(file);

这两个字符串都不是吗? 第一个工作,但sexond给我错误: E2034无法将Unicode字符串转换为“const char *”

在我从用户那里获取输入的情况下,我只能传递一个字符串。我如何通过整条道路?

3 个答案:

答案 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*,一切都很好。

StringSystem::String,它是System::UnicodeString的typedef,它是Embarcadero的UTF-16编码字符串类(类似于std::wstring,但具有不同的语义)。当您将String传递给opendir()时,会出现转换错误。

要将String值传递给opendir()(或任何其他需要char*的函数),您需要先将其转换为System::AnsiString,然后使用{ {1}}从中获取AnsiString::c_str(),例如:

char*