私のプログラムで辞書を実装するためにC++マップを使用しています。私の関数は引数として構造体を取得し、structure.name
メンバに基づく関連値、つまりchar named[32]
を返さなければなりません。次のコードは、私の問題を示していますC++ map :: find char * vs. char []
map <const char *, const char *> myMap;
myMap.insert(pair<const char *, const char *>("test", "myTest"));
char *p = "test";
char buf[5] = {'\0'};
strcpy(buf, "test");
cout << myMap.find(p)->second << endl; // WORKS
cout << myMap.find("test")->second << endl; // WORKS
cout << myMap.find(buf)->second << endl; // DOES NOT WORK
第三の場合は動作しませんし、私はそれを動作させるために何をすべき理由を、私はわかりません。 渡された値を見るために上記のコードをデバッグしましたが、私はまだ問題を把握できません。
ありがとうございます!
実際には、同じ文字を持つ2つの文字列リテラルが同じアドレスを持つかどうかは実装定義です。だから '' test "==" test "'は偽であるかもしれません。また、文字列リテラルが重複する可能性があるので、 ''混乱 '+ 3 == "fusion" 'が真実かもしれません。 –