Я пишу программу на С++, которая использует сокеты c. Мне нужна функция для получения данных, которые я хотел бы вернуть в виде строки. Я знаю, что это не сработает:
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
[ОБНОВЛЕНИЕ]
Я также пытался использовать &output[0]
, но вывод содержал следующее:
jello!
[insert a billion bell characters here]
"желе!" были данные, отправленные обратно в сокет.
&output[0]
, а не только&output
? - person 735Tesla   schedule 22.01.2014read
. - person billz   schedule 22.01.2014jello!\n
- person 735Tesla   schedule 22.01.2014