Benjamin

静以修身,俭以养德,非澹薄无以明志,非宁静无以致远。
随笔 - 388, 文章 - 0, 评论 - 196, 引用 - 0
数据加载中……

strstr、wcsstr的差异

写博客,只是记录下一些自己工作中的心得。最近在做http协议解析,其实就是操作字符串,由于是在Mobile下开发,所以都是Unicode。
发现strstr()、wcsstr()在应用中有差别。下面是我的调试代码
TCHAR* ch = L"123*56";
 TCHAR* LL = L"56";
 TCHAR* TT = _tcsstr(ch,LL);
 
 int a = TT - ch;
  int b= TT - L"123*56";
其中b为负值,a就是正值,在strstr中则没有这样的事都是正值。通过跟踪发现TT的地址大于L"123*56",可a和b就是一个正一个负,我用的VC8,感兴趣的朋友可以试一试。也就是说在Unicode下,在试图对字符串加减时,我们实际访问的不是它的首地址,它会自动转到字符串末端的地址。
C++中的字符分三类:单字符、多字符、宽字符。分别是char、TCHAR、WCHAR。TCHAR具有通用性,根据环境不同,所指向的类别不同。并且下面的写法是合法的。
char CH[] = "1234";
WCHAR t[5] = {0};
t[0] = CH[0];
它们只是字符所占的空间不同而已,值可以一样的。

posted on 2008-07-20 22:23 Benjamin 阅读(8149) 评论(2)  编辑 收藏 引用 所属分类: PDA/PPC开发

评论

# re: strstr、wcsstr的差异[未登录]  回复  更多评论   

TT毫无疑问是比ch大,问题根本不在这里。

b是计算TT与另一个指向L"123*56"的指针(下文称为pT)之间的差值,很显然,此时pT的值大于TT。

这与Unicode无关,只与编译器如何放置字符串常量有关。
2010-09-21 16:36 | Just

# re: strstr、wcsstr的差异[未登录]  回复  更多评论   

关键是,pT与ch指向不同的地址,只是在这不同的地址存放的字符串是一致的。
2010-09-21 16:42 | Just

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理