Я играю с программированием сокетов на Qt. Я читаю массив символов из сокета сервера как клиентский сокет и возвращаю результат в качестве указателя char.Как преобразовать указатель char, возвращенный из функции в строку?
char* zgr_socket::sendMessage(){
char buffer[5];
while(1){
bzero(buffer,2);
n = read(sockfd,buffer,2);
if (n < 0){ }
close(sockfd);
return buffer;
}
}
И я стараюсь, чтобы получить результирующий массив символов из в этом методе
void MainWindow::on_pushButton_2_clicked()
{
char* returnedChar = mySocket->sendMessage();
std::string aString(returnedChar);
QString myQString = QString::fromStdString(aString);
ui->label1->setText(myQString);
}
Независимо от того, что я пытался, я не мог управлять, чтобы получить правильный массив символов. Когда я отлаживаю взгляд на строку return buffer
, он возвращает правильный массив, но после какой-то магии я получаю произвольные значения в переменной aString
. Может ли кто-нибудь увидеть причину, пожалуйста?
@AndyG That frickng буфера локальной переменный и возвращаемого значение зависшего ponter –
@ DieterLücking Этого комментария является правильный ответ и заставил меня смеяться. Спасибо. – ozgur
Выполнение программирования сокетов при использовании чисто C apis - это верный способ причинить себе вред. Я предполагаю, что вы делаете это по какой-то определенной причине, потому что, если все, что вам нужно, это подтолкнуть некоторые данные по сети, Qt обеспечивает все это простым в использовании способом. Весь смысл Qt - сделать вашу жизнь проще. По крайней мере, попробуйте использовать контейнеры C++ для перемещения ваших данных, например, 'QByteArray' или' std :: vector '. Таким образом, вы менее склонны умирать от сильной смерти C, и вы не будете иметь дело с совершенно ненужным ручным управлением памятью. –