紫水晶编程技术论坛 - 努力打造成全国最好的编程论坛

 找回密码
 加入我们

QQ登录

只需一步,快速开始

搜索
查看: 2190|回复: 0

[分享] 使用str(i)cmp和wcs(i)cmp时容易翻车的情况

[复制链接]

854

主题

3481

帖子

2

精华

管理员

此生无悔入华夏,  长居日耳曼尼亚。  

Rank: 125Rank: 125Rank: 125Rank: 125Rank: 125

积分
36100
发表于 2020-2-24 00:55:14 | 显示全部楼层 |阅读模式
这些函数属于非常基本的C库函数,学编程超过3天的人都知道。然而很多人不知道的是,这些函数不会检查字符串指针的有效性,如果字符串指针无效,就翻车了。比如以下程序:
  1. void main()
  2. {
  3.         WCHAR s1[] = L"s1";
  4.         WCHAR s2[] = L"s2";
  5.         __try
  6.         {
  7.                 printf("%ld\n",wcsicmp(NULL,NULL));
  8.         }
  9.         __except(1)
  10.         {
  11.                 puts("exception[1].");
  12.         }
  13.         __try
  14.         {
  15.                 printf("%ld\n",wcsicmp(s1,NULL));
  16.         }
  17.         __except(1)
  18.         {
  19.                 puts("exception[2].");
  20.         }
  21.         __try
  22.         {
  23.                 printf("%ld\n",wcsicmp(NULL,s1));
  24.         }
  25.         __except(1)
  26.         {
  27.                 puts("exception[3].");
  28.         }
  29.         __try
  30.         {
  31.                 printf("%ld\n",wcsicmp(s1,s2));
  32.         }
  33.         __except(1)
  34.         {
  35.                 puts("exception[4].");
  36.         }
  37.         system("pause");
  38. }
复制代码
输出的结果是:
  1. exception[1].
  2. exception[2].
  3. exception[3].
  4. -1
复制代码
可见如果输入指针无效,马上翻车。
您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

手机版|Archiver|紫水晶工作室 ( 粤ICP备05020336号 )

GMT+8, 2024-4-25 18:04 , Processed in 0.021982 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表