std::cout << WebClient().Load(in.substr(2, in.length()));
我做了一個WebClient的樂趣,你可以傳入一個字符串通過cin到通過std :: getline(cin,in);訪問違規神祕與gethostbyname?
我Load方法的起始部分:
std::string Load(std::string url)
{
WSADATA wsaData;
if (WSAStartup(MAKEWORD(2,2), &wsaData) != 0) {
return "WSAStartup failed.\n";
}
SOCKET Socket=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
struct hostent *host;
host = gethostbyname(url.c_str());
SOCKADDR_IN SockAddr;
SockAddr.sin_port=htons(80);
SockAddr.sin_family=AF_INET;
if(host != nullptr)
{
SockAddr.sin_addr.s_addr = *((unsigned long*)host->h_addr);
}
因爲主機成爲nullptr(因此檢查它),但具有相同字符串,但在不同的傳遞,我會得到一個訪問衝突:Web客戶端()。加載(「www.google.ca」)它的工作原理。我試圖把c_str()放在substr'ed字符串的末尾,但沒有用處。
我仍然在學習這個怪癖,這是怎麼回事?我使用從
#include <http.h>
#include <string>
#include <winsock2.h>
#include <windows.h>
#include <iostream>
#pragma comment(lib,"ws2_32.lib")
@hyde我在調試模式下查看參數var,它是「www.google.ca」,就像傳遞一個const字符串一樣 – 2013-03-12 05:06:11
因此,'gethostbyname'返回nullptr,你說?在這種情況下你傳遞給它什麼,url的價值是什麼? – hyde 2013-03-12 05:09:16
當gethostbyname返回nullptr時,由getline()檢索的字符串被傳遞給方法。如果它是一個常量字符串,它不會返回nullptr,但即使在調試模式下,它看起來沒有格式錯誤,gethostbyname也無法處理它? – 2013-03-12 05:11:01