调试::HttpOpenRequest的问题

今天调试一段代码,这段程序之前可以运行,但是在我加入一些新的内容以后,再运行就出问题了,出现

First-chance exception in HttpAndFtpTest.exe (KERNEL32.DLL): 0xC0000005: Access Violation

的警告,后来跟踪进去,发现在

 CONST TCHAR *szAcceptType=__HTTP_ACCEPT_TYPE;

 _hHTTPRequest=::HttpOpenRequest( _hHTTPConnection,
               __HTTP_VERB_GET, // HTTP Verb
               szURI, // Object Name
               HTTP_VERSION, // Version
               NULL, // Reference
               &szAcceptType, // Accept Type
               INTERNET_FLAG_KEEP_CONNECTION | NTERNET_FLAG_NO_CACHE_WRITE,
               0); // context call-back point

这段出了问题,搜了下网上,刚好有个人总结了该函数的问题,出现这个问题的原因是因为强制把szAcceptType这个1维数组变成2维数组,它的第二个数组没有'\0'结尾所导致的访问冲突。

我将第一句改成

CONST TCHAR *szAcceptType[2]={__HTTP_ACCEPT_TYPE,NULL};

就可以了。

总结:

1、在别的程序可以正确运行的程序,不一定是正确的,可能因为某些原因,刚好可以错误运行。不能因为这段程序在别的环境可以运行就以为一定正确。

2、这个函数的原型是:

HINTERNET WINAPI HttpOpenRequest(
  HINTERNET hConnect,
  LPCTSTR lpszVerb,
  LPCTSTR lpszObjectName,
  LPCTSTR lpszVersion,
  LPCTSTR lpszReferrer,
  LPCTSTR* lplpszAcceptTypes,
  DWORD dwFlags,
  DWORD dwContext
);

其中 LPCTSTR* lplpszAcceptTypes, lplpsz表示其是二维的文本指针,既然如此,那么就要注意各个文本的结束符问题,这个是最重要的,以后在看msdn的函数时,一定要注意相关的问题。

转载于:https://www.cnblogs.com/Salior/archive/2012/11/08/2759876.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值