strcmp返回值问题

悟影 2006-11-22 09:18:11
我定义了一个如下数组
const char *limit[]={"(", ")", "[", "]", ",".","!",",",";","{","}","#","_","'"};/*限界符*/

在文件中一个一个字符读出来再与上面的比较,若在其中返回1不在其中返回0,
从文件中读取 的字符保存在sign[0]中,其有一个sin[1]='\0'是用于防止输出越界的
在一个函数中这样比较

int i=0;
while(limit[i])
if(strcmp(str,limit[i++])==0)return 1;
return 0;
但为什么老是返加1呢,比如我读了个“+”号,居然也返回1,我晕!
...全文
277 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
yzhouen 2006-11-23
  • 打赏
  • 举报
回复
没有问题,测试应该是正常的
liuguangzhou 2006-11-23
  • 打赏
  • 举报
回复
单步调试一下就知道了。
看比较的两个内容的实际值。
w_anthony 2006-11-23
  • 打赏
  • 举报
回复
看错了,你遇到的是一直相等,我以为是不相等了-_-b

应该是while(limit[i])这里有问题,limit[i]可能会访问越界,越界的话,limit[i]未必是NULL,这样就可能出现问题了。
w_anthony 2006-11-23
  • 打赏
  • 举报
回复
str是什么类型?你是比较字符还是字符串?比较字符串的话,str第二个元素如果不是'\0'肯定会执行return 1的。

比较字符的话
const char limit[]={'(', ')', '[', ']', '.', '!', ',', ';', '{', '}', '#', '_', '\''};

str类型改为char

(strcmp(str,limit[i++])==0)改为(str==limit[i++])

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧