でクライアント サーバー チャットのようなアプリを作成しており、でC++
UI を行っていncurses
ます。vector<char *> msgVector
画面全体を定期的に再描画できるように、すべてのメッセージを保存したいと思います。それにもかかわらず、値を出力したい場合、すべての項目は同じ値 (最後に受け入れられたメッセージ) を持ちます。
void acceptMessages() {
char buffer[256];
fd = c->createClient2Fd("localhost", 12345);
while (true) {
memset(buffer, 0, sizeof ( buffer));
int l = recv(fd, buffer, sizeof ( buffer), 0);
msgVector.push_back(buffer);
redrawScreen();
}
void redrawScreen() {
erase();
mvhline(0, 0, ACS_HLINE, COLS);
mvhline(LINES - 2, 0, ACS_HLINE, COLS);
mvaddstr(LINES - 1, 0, "MESSAGE:");
move(LINES - 1, 9);
// prints right count of messages
// but on every line is printed only the last message
for (int i = 0; i != msgVector.size(); i++)
cout<<msgVector[i]<<endl;
move(LINES - 1, 9);
refresh();
}
つまり、受け入れられたメッセージは次のとおりです。
1) Hello world!
2) My name is John
3) John Doe
4) Test message
次に、出力を取得します。
Test message
Test message
Test message
Test message
誰が私に説明できますか、これを引き起こす原因と修正方法はありますか?