Как я понимаю, то тут какая-то проблема с стеком, хотя может это я нуб. Есть код: Code: std::string& func() { WSADATA wsaData; WSAStartup(MAKEWORD(2, 2), &wsaData); sockaddr_in _sockaddr; _sockaddr.sin_family = AF_INET; _sockaddr.sin_port = htons(80); _sockaddr.sin_addr.s_addr = inet_addr("10.0.0.7"); SOCKET sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); connect(sock, (sockaddr *)&_sockaddr, sizeof(_sockaddr)); std::string buf = "Тут http-запрос. С ним все ок)"; char to[1024]; char from[1024]; strcat(to, buf.c_str()); send(sock, to, sizeof(to), 0); recv(sock, from, sizeof(from), 0); rtrn += from; std::string x = "=)"; return x; } Функция возвращает, как видно, x. Делаю что-то типа: Code: std::cout << func(); Но место смайлика появляется в консоли html-код, то есть rtvn, и сразу программа завершается с ошибкой. Как так?
так выводит мусор (мб все дело в том, что при return значения из функции объект x уничтожается) Code: string x = "=)"; return x; а так все ок Code: string *x = new string("=)"); return *x;
strcat(to, buf.c_str()); у тебя to не инициализирован и по этому можешь словить переполнение буфера. так что юзай strcpy или предварительно в сделай to[0] = 0x00; К томуже send(sock, to, sizeof(to), 0); ты отошлешь все 1024 данных. хотя по факту http запрос короче по этому юзай вместо sizeof - strlen
А я бы сделал Code: char buf[] = "Тут http-запрос. С ним все ок)"; send(sock, buf, sizeof(buf), 0); + к этому обязательно нужно проверку делать количества принятых и отправленных байт, так как TCP/IP потоковый протокол и твое сообщение может не уместиться в окно TCP... в общем вот тут я размусоливал азы, прочитай, пойми или скопируй.