【问题标题】:InternetGetLastResponseInfo returns strange characters instead of error messageInternetGetLastResponseInfo 返回奇怪字符而不是错误消息
【发布时间】:2026-02-06 05:40:01
【问题描述】:

我在调用 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=ERROR_INTERNET_EXTENDED_ERROR,但不是打印类似的东西

FtpOpenFile 错误:服务器拒绝了请求,因为它对你有个人厌恶,或者换句话说,对你有一种微妙的仇恨。

它给了我

FtpOpenFile 错误:x☺?.

谢谢。

【问题讨论】:

  • 自残的痛苦。 InternetGetLastResponseInfo() 返回 BOOL。你得到了 FALSE 但你没有检查它,所以你不知道为什么它不起作用。 总是断言返回值。

标签: c++ c ftp wininet


【解决方案1】:

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

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

请参阅InternetGetLastReponseInfo documentation 了解更多信息。

【讨论】:

    最近更新 更多