我在C ++中使用 pdcurses 来编写游戏并在尝试输出字符串时遇到一些问题。
基本上相关的程序是这样的:
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
---&gt; troop.getname()
---&gt; bunpointer.bgetname
很简单......
答案 0 :(得分:1)
我从未使用过pdcurses,但看起来mvprintw与printf类似。所以%s意味着你传递了一个c风格的字符串(const char *),但你给它一个std :: string。尝试在std :: string上调用c_str函数:
mvprintw(17,0,"%s was created!",troop.getname(1).c_str());