none
一段简单的字符串处理程序,为何在不同操作系统上产生结果不一样? RRS feed

  • 问题

  • 程序是VS 2003开发的,一个ActiveX控件,用了ATL,字符集设置的是MBCS。

    这部分代码是分析一个http的URL,提取其中的域名之类的信息,用于构造HTTP协议头用的。

    现在的问题是,这部分程序在windows 2003或windows 7上一切正常,但在xp上运行时,如果URL比较长,大概超过71个字符(不是byte)吧,就会出现提取到的域名不正确的现象。

    不知是字符集的设置在不同操作系统上内存分配不一样造成溢出了呢?还是其它原因,我不知道怎么调试了,因为在出现问题的机器上直接用vs调试又是OK的。难道是release编译的问题?

    如果我想动态的查看内存中的值?要借用什么工具?windbg行吗?OD呢?

    代码如下:

    int CFileMove::ParseUrl(char* url, char* server, int* port, char* path)
    {
    	USES_CONVERSION;
    	int nBeg=0,nEnd =0;
    	int nPos=0;
    	char szPort[10]={0};	
    	char szURL[2048]={0};	
    	sprintf(szURL,"%s",url);
    	int len=strlen(szURL);		
    	LPCTSTR lpURL = szURL;
    	for(int i=0;i<len;i++)
    	{
    		if(lpURL[i]=='/' && lpURL[i+1] == '/')
    		{
    			i += 2;
    			nBeg = i;
    		}
    		else if(lpURL[i] == '/')
    		{
    			nEnd = i;
    			break;
    		}
    		if(lpURL[i]==':'&&  lpURL[i+1] != '/' && nPos==0)
    		{
    			nPos=i;
    		}
    	}		
    	if(nEnd==0)
    	{
    		strcat(szURL,"/");
    		nEnd=strlen(szURL);
    	}
    	memcpy(server,&lpURL[nBeg],nPos > nBeg ? (nPos-nBeg) : (nEnd-nBeg));
    	AtlTrace("server:%s",server);
    	if(nPos > nBeg)
    	{
    		memcpy(szPort,&lpURL[nPos+1],nEnd-nPos-1);
    		*port=atoi(szPort);
    	}	
    	else
    	{
    		*port=80;
    	}
    	strcpy(path,&lpURL[nEnd]);
    	return 0;
    }
    

    调用它的地方的代码片段如下:

    STDMETHODIMP CFileMove::SendContent(BSTR url, BSTR content, BSTR* result)
    {
    	try
    	{
    		USES_CONVERSION;	
    		
    		LPCTSTR lpszContent = W2A(content);
    		//------------解析url------------------
    		LPTSTR lpszURL=W2A(url);
    		int nPort=80;
    		char szServer[100]={0},szObject[1024]={0};
    		ParseUrl(lpszURL,szServer,&nPort,szObject);
    
    		//---------------------------------------
    		CHttpSocket hpSock;
    		……………………略
    

    假设传入的url是:http://social.microsoft.com/Forums/zh-cn/newthread?forum=visualcpluszhchs

    按正常我是要szServer的值是social.microsoft.com才对,可是在xp上运行,这个值根本不是域名那一段,而是类似于s/zh-cn/newthread?forum=visualcpluszhchs这样的。

    W2A有关系吗??

    2010年12月18日 1:30

答案

全部回复