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

1 つ目はconst char*、2 つ目は std::string です。関数はあなたのケースでopendirのみ受け入れるため、単独で変換するconst char*ことはできません。によって機能を動作させることができます。std::stringconst char*opendir(file.c_str());

于 2012-06-15T03:24:24.793 に答える
2

いいえ。文字列は文字配列ではありません。opendir には char 配列が必要です。

于 2012-06-15T03:25:01.563 に答える
0

opendir()const char*入力として8 ビットのナローが必要です。ナロー リテラルをopendir()に渡すと、const char[]暗黙的に に劣化するが渡されconst char*、すべて問題ありません。

Stringis はSystem::String、Embarcadero の UTF-16 でエンコードされた文字列クラスである の typedef ですSystem::UnicodeString( に似てstd::wstringいますが、セマンティクスが異なります)。Stringtoを渡すopendir()と、変換エラーが発生します。

String値をopendir()(または を期待するその他の関数)に渡すには、char*まずそれを に変換しSystem::AnsiString、次に を使用AnsiString::c_str()してそこから を取得する必要がありますchar*

String file = "C:\\XYZ";
opendir(AnsiString(file).c_str());
于 2014-03-09T08:44:11.573 に答える