Я пишу программу на C++, которая использует c сокеты. Мне нужна функция для получения данных, которые я хотел бы вернуть строку. Я знаю, что это не будет работать:C++ Чтение из сокета в std :: string
std::string Communication::recv(int bytes) {
std::string output;
if (read(this->sock, output, bytes)<0) {
std::cerr << "Failed to read data from socket.\n";
}
return output;
}
Поскольку функция read()
* принимает указатель массива символов для аргумента. Каков наилучший способ вернуть строку здесь? Я знаю, что теоретически могу прочитать данные в массиве символов, а затем преобразовать их в строку, но это кажется мне расточительным. Есть ли способ лучше?
* Я на самом деле не против использовать что-то другое, что read()
если есть более подходящий альтернативный
Вот весь код на Pastebin, который должен истечь в неделю. Если у меня нет ответа на то я вновь разместить его: http://pastebin.com/HkTDzmSt
[UPDATE]
Я также попытался с помощью &output[0]
, но получил выход содержал следующее:
jello!
[insert a billion bell characters here]
"желе!" были данные, отправленные обратно в сокет.
c_str() is const, вы не можете этого сделать. просто прочитайте в буфер, затем скопируйте в строку. – billz
@billz Правильно, я отказываюсь от своего предложения. – Borgleader
Это даже правильная форма? Если нет, я должен поступить иначе? – 735Tesla