InternetGetLastResponseInfo返回奇怪的字符而不是错误消息

时间:2013-12-06 23:45:59

标签: c++ c ftp wininet

在调用FtpOpenFile之后我正在使用以下代码:

error=GetLastError();
if(error!=0)
{
    if(error==ERROR_INTERNET_EXTENDED_ERROR)
    {
        InternetGetLastResponseInfo(&error,NULL,&bufferLength);
        buffer=malloc(bufferLength);
        InternetGetLastResponseInfo(&error,buffer,NULL);
        printf("FtpOpenFile error : %s.\n",buffer);
    }
    else
    {
        printf("FtpOpenFile error : %d.\n",(int)error);
    }
}

我确认错误= ERROR_INTERNET_EXTENDED_ERROR,但不是打印像

这样的东西

FtpOpenFile错误:服务器拒绝了该请求,因为它对您有个人不喜欢,或者换句话说是一种微妙的仇恨。

它给了我

FtpOpenFile错误:x☺?。

感谢。

1 个答案:

答案 0 :(得分:1)

你对IntergetGetLastResponseInfo的第二次电话是错误的;你没有按要求传递缓冲区的长度。您调用的第一个调用将检索所需缓冲区的大小,但您仍需要告诉函数第二次调用它时缓冲区的大小。 (另请注意,文档说第一次调用中返回的值不包括终止零的空间。)

InternetGetLastResponseInfo(&error, NULL, &bufferLength);
buffer = malloc(bufferLength + 1);
InternetGetLastResponseInfo(&error, buffer, &bufferLength);

有关详细信息,请参阅InternetGetLastReponseInfo documentation