J'écris un simple serveur de chat et je me demande quel type de données dois-je utiliser pour un tampon. Je pensais à string
(ce qui serait très confortable dans mon cas), mais de nombreuses fois j'ai vu des gens écrire que string
ne devrait pas être utilisé comme un tampon (mieux vaut utiliser vector<char>
) mais est-ce toujours le cas?Quel type de données dois-je utiliser comme tampon?
Dans mon programme, je voudrais lire un message du client dans un tampon, envoyer ces données à un autre client et également stocker ce message dans la base de données. J'utilise SQLite donc, avec string
(sauter l'initialisation db), il ressemblerait à ceci:
std::string buffer;
buffer.resize(1024);
// read some data into the buffer
socket.async_read_some(boost::asio::buffer(&buffer[0], 1024),
[this, self](boost::system::error_code ec, size_t length)
{
buffer.resize(length);
// do some other things with buffer - send to another user ...
std::string query = "INSERT INTO messages (message) VALUES (\"" + buffer "\")";
sqlite3_exec(database, query.c_str(), sql_callback, NULL, &err_msg);
}
Si je devais utiliser vector<char>
à la place, il me faudrait tout d'abord pour le convertir en une chaîne (ou peut-être il y a une autre façon ?)
Alors, que dois-je utiliser?
En fait, je ne répondrais pas à votre question, mais je penserais aussi à la conformité UTF-8 et à l'injection sql (vous avez probablement pris cela en compte). Dans mon expérience, en traitant les entrées des utilisateurs, 'wstring' évitait beaucoup de problèmes avec les clients. –
Pour moi, cela dépend de la façon dont vous lisez les données et comment le tampon va être utilisé. Mais si cela va se terminer dans un 'std :: string' et que vous pouvez lire directement dans cette chaîne alors j'utiliserais juste un' std :: string'. J'aurais tendance à utiliser un 'std :: vector' pour les données binaires ou un tampon temporaire lors de la lecture dans une chaîne (ou quelque chose d'autre). –
Galik
Pourriez-vous s'il vous plaît fournir le code qui lit les données dans le tampon? –