【问题标题】:Opening directory function打开目录功能
【发布时间】:2012-06-15 02:45:12
【问题描述】:

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

使用:Embarcadero C++ Builder

有什么区别:

opendir("C:\\XYZ")

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

不是两个字符串吗? 第一个有效,但 sexond 给了我错误: E2034 无法将 Unicode 字符串转换为 'const char*'

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

【问题讨论】:

  • 我不知道 Embarcadero C++。但是,如果可能的话,你可以试试 String file = "C:\XYZ"; opendir(file.c_str());

标签: c++ string c++builder


【解决方案1】:

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

【讨论】:

  • 嗨。由于某种原因,当我给它时它不起作用:opendir(file.c_str())。但是当我这样做时起作用了: char* f = file.c_str(); opendir(f);
  • 这是错误的答案。 String 在这种情况下不是 std::string。它实际上是System::UnicodeString,它是一个C++Buider 特有的字符串类。 System::UnicodeString 有一个c_str(),就像std::string 一样,只是System::UnicodeString::c_str() 返回一个wchar_t*std::string::c_str() 返回一个const char*
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    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,然后使用AnsiString::c_str() 得到char*从它,例如:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-22
      • 2011-07-18
      • 1970-01-01
      • 2014-03-16
      • 2020-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多