Я использую карту 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
Я не знаю, почему третий случай не работает, и что я должен сделать, чтобы заставить его работать. Я отлаживал приведенный выше код, чтобы посмотреть переданные значения, и я все еще не могу понять проблему.
Спасибо!
На самом деле, это реализация, определяемая тем, имеют ли два строковых литерала с одинаковыми символами один и тот же адрес. Поэтому '' test "==" test "' может быть ложным. Кроме того, строковые литералы могут перекрываться, поэтому «путаница» + 3 == «слияние» может быть правдой. –