2012-06-15 27 views
0

這是一個基本的理解相關問題的概念。英巴卡迪諾C++ Builder的開放目錄功能

之間有什麼區別:

opendir("C:\\XYZ") 

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

不都串

使用工作? 第一個工程,但sexond給我的錯誤: E2034無法將Unicode字符串轉換爲'const char *'

在我從用戶接受輸入的情況下,我只能傳遞一個字符串。我如何通過整個路徑?

+1

我不知道Embarcadero C++。 但是,如果可能,你可以試試 String file =「C:\ XYZ」;執行opendir(file.c_str()); –

回答

2

第一個是const char*,第二個是std :: string。 opendir函數在您的情況下僅接受const char*,因此無法自行將std::string轉換爲const char*。您可以通過opendir(file.c_str());獲得該功能。

+0

嗨。由於某種原因,我沒有工作,當我給它像:opendir(file.c_str())。但是,當我做到了:char * f = file.c_str();執行opendir(F); – JJunior

+1

這是錯誤的答案。在這種情況下'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

不。字符串不是字符數組。 opendir需要一個char數組。

0

opendir()預計8位窄const char*作爲輸入。當你通過一個狹義的文字到opendir(),你傳遞給它一個const char[],這隱含地降級到const char*,並且一切都很好。

StringSystem::String,其是用於System::UnicodeString一個typedef,這是Embarcadero公司的UTF-16編碼的字符串類別(類似於std::wstring,但具有不同的語義)。當您將String傳遞給opendir()時,會出現轉換錯誤。

傳遞一個Stringopendir()(或預計char*任何其他功能),則需要先將其轉換爲一個System::AnsiString,然後用AnsiString::c_str()從它那裏得到一個char*,如:

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