0

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

使用:Embarcadero C++ Builder

有什么区别:

opendir("C:\\XYZ")

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

不是两个字符串吗?第一个有效,但 sexond 给了我错误:E2034 Cannot convert Unicode String to 'const char*'

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

4

3 回答 3

2

第一个是 a const char*,第二个是 std::string。该opendir函数仅const char*在您的情况下接受,因此无法自行std::string转换const char*。您可以通过opendir(file.c_str());.

于 2012-06-15T03:24:24.793 回答
2

不,String 不是 char 数组。opendir 需要一个 char 数组。

于 2012-06-15T03:25:01.563 回答
0

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());
于 2014-03-09T08:44:11.573 回答