я использую pdcurses в C ++ для программирования игры и у меня возникли некоторые проблемы при попытке вывести строку.
В основном соответствующая программа выглядит так:
class Bunny {
private:
string name;
public:
string bgetname() { return name;};
}
class Troop {
private:
vector<Bunny> bunpointer; // bunpointer is a pointer to different bunnies
public:
string getname(int i) {return bunpointer[i].bgetname();};
}
/* I create some bunnies in the troop which is pointed by bunpointer
* troop is in class Troop
*/
int main() {
Troop troop; // there will be 5 bunnies in the troop at the beginning
initscr();
// .....
mvprintw(17,0,"%s was created!",troop.getname(1)); // <---- where problem is
// .....
}
Программа должна выводить имена кроликов в отряде, но на самом деле выводит некоторые случайные символы, такие как <
или же u
или же @
….
Я думаю, что troop.getname
в main()
могут возникнуть проблемы с указанием правильной памяти, в которой хранятся имена кроликов, поэтому на выходе появляются нерегулярные символы. Но я не могу понять, почему, потому что я чувствую, как цепь mvprintw
—>troop.getname()
—>bunpointer.bgetname
это просто …
Я никогда не использовал pdcurses, но похоже, что mvprintw похож на printf. Таким образом,% s означает, что вы передаете ему строку в стиле c (const char *), но вы даете ей std :: string. Попробуйте вызвать функцию c_str для вашей std :: string:
mvprintw(17,0,"%s was created!",troop.getname(1).c_str());