這是一個基本的理解相關問題的概念。英巴卡迪諾C++ Builder的開放目錄功能
之間有什麼區別:
opendir("C:\\XYZ")
和
String file = "C:\\XYZ";
opendir(file);
不都串
使用工作? 第一個工程,但sexond給我的錯誤: E2034無法將Unicode字符串轉換爲'const char *'
在我從用戶接受輸入的情況下,我只能傳遞一個字符串。我如何通過整個路徑?
這是一個基本的理解相關問題的概念。英巴卡迪諾C++ Builder的開放目錄功能
之間有什麼區別:
opendir("C:\\XYZ")
和
String file = "C:\\XYZ";
opendir(file);
不都串
使用工作? 第一個工程,但sexond給我的錯誤: E2034無法將Unicode字符串轉換爲'const char *'
在我從用戶接受輸入的情況下,我只能傳遞一個字符串。我如何通過整個路徑?
第一個是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); – JJunior
這是錯誤的答案。在這種情況下'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 *'。 –
不。字符串不是字符數組。 opendir需要一個char數組。
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
,然後用AnsiString::c_str()
從它那裏得到一個char*
,如:
String file = "C:\\XYZ";
opendir(AnsiString(file).c_str());
我不知道Embarcadero C++。 但是,如果可能,你可以試試 String file =「C:\ XYZ」;執行opendir(file.c_str()); –