gpt4 book ai didi

c++ - 使用gethostbyname访问违规之谜?

转载 作者:行者123 更新时间:2023-11-30 01:23:08 24 4
gpt4 key购买 nike

std::cout << WebClient().Load(in.substr(2, in.length()));

我为了好玩做了一个WebClient,你可以通过cin传入一个字符串到in via std::getline(cin, in);

我的 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(因此检查它),但使用相同的字符串但以不同的方式传递:WebClient().Load("www.google.ca") 它有效。我尝试将 c_str() 放在子字符串的末尾,但没有用。

我还在学习怪癖,这是怎么回事?我正在使用来自

的标准库
#include <http.h>
#include <string>
#include <winsock2.h>
#include <windows.h>
#include <iostream>
#pragma comment(lib,"ws2_32.lib")

最佳答案

尝试检查从 getline 接收到的传入字符串的值。当 gethostbyname 收到它时,它可能格式不正确。您可以使用 WSAGetLastError 检查这是否是失败的地方(并变为 NULL) .检查 MSDN 以获取 gethostbyname 可能的 error codes .

编辑:你说你有看似相同的参数。你能找到一种方法来证明这一点(对你自己)吗?也许那里有看不见的角色?换行 \n,或者它可能使用不同的编码?只是一些想法。

关于c++ - 使用gethostbyname访问违规之谜?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15353651/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com