ddaiss 发表于 2012-11-28 08:16:16

讨论strncmp

       if(strncmp(buffer,"thisisTI",8)==0)
      {
                SciaRegs.SCIFFTX.bit.TXINTCLR = 1;
      }这句判断,总是进不去,可以看到buffer0~7中存有的数据为‘t’,‘h’,‘i’,‘s’,‘i’,‘s’,‘T’,'I',可是strncmp的判断确小于零,这个问题大家有遇到过吗?

ddaiss 发表于 2012-11-28 10:07:37

唉,坐等交流

ddaiss 发表于 2012-11-28 20:50:07

唉,怎么只有人看,没人留脚印呢

ddaiss 发表于 2012-11-29 09:56:32

难道没人用过这个东西吗

sunliezhi 发表于 2012-11-29 10:08:17

本帖最后由 sunliezhi 于 2012-11-29 10:15 编辑

看你如何定义的buffer;
还有,字符串中有\0结尾。

ddaiss 发表于 2012-11-29 11:33:27

我的buffer是char型的,而且我比较的是前8位,不会涉及到/0这个东西吧,我把这句strncmp(buffer,"thisisTI",8)改为strncmp(buffer,"thisisTI",3)还是不能比较的

sunliezhi 发表于 2012-11-30 00:14:25

我在x86上试了,没问题的:

ddaiss 发表于 2012-11-30 08:11:34

sunliezhi 发表于 2012-11-30 00:14 static/image/common/back.gif
我在x86上试了,没问题的:

先感谢一下您帮我试了一下
不过我的DSP2812串口接收的时候用的FIFO,然后不能匹配唉,就是我前面放的代码

ddaiss 发表于 2012-12-4 13:23:48

大家2812上没用过这个函数吗

ddaiss 发表于 2012-12-6 08:35:38

真的再没人回答了吗

jim166783 发表于 2012-12-6 09:02:42

strncmp之前将buffer打印出来看看内容,这个很关键

或者用strstr
if(strstr(buffer, "thisisTI"))
{

}

himm007 发表于 2012-12-6 10:07:33

先将buffer的内容打印出来看看

ddaiss 发表于 2012-12-6 21:44:00

himm007 发表于 2012-12-6 10:07 static/image/common/back.gif
先将buffer的内容打印出来看看

打印了,一模一样,就是比较不出正确结果来,我还是了单独试了一下没用串口,就直接比较也是不对

himm007 发表于 2012-12-7 11:21:32

ddaiss 发表于 2012-12-6 21:44 static/image/common/back.gif
打印了,一模一样,就是比较不出正确结果来,我还是了单独试了一下没用串口,就直接比较也是不对 ...

写一段测试代码, 验证下是不是strncmp函数有问题,有可能是单片机的string库没有完整实现strncmp
{
   char stra[]="stringa";
   char strb[]="stringb";

   printf("%s\n", strncmp(stra, strb, 6) == 0 ? "==" : "!=");
}

zhonggp 发表于 2012-12-7 12:56:55

楼主strcmp是不是同个文件上的,如果不是,请在调用函数前增加函数声明,或者增加头文件.

xi_liang 发表于 2012-12-7 13:56:44

是不是给编译器优化掉了

ddaiss 发表于 2012-12-7 18:31:49

jim166783 发表于 2012-12-6 09:02 static/image/common/back.gif
strncmp之前将buffer打印出来看看内容,这个很关键

或者用strstr


strstr这个函数好像不太完整呀

ddaiss 发表于 2012-12-7 18:35:38

himm007 发表于 2012-12-7 11:21 static/image/common/back.gif
写一段测试代码, 验证下是不是strncmp函数有问题,有可能是单片机的string库没有完整实现strncmp
{
      ...

恩,明天试试看

ddaiss 发表于 2012-12-7 18:36:17

zhonggp 发表于 2012-12-7 12:56 static/image/common/back.gif
楼主strcmp是不是同个文件上的,如果不是,请在调用函数前增加函数声明,或者增加头文件. ...

头文件是加了,但是你说的函数声明是啥意思

ddaiss 发表于 2012-12-7 18:36:31

xi_liang 发表于 2012-12-7 13:56 static/image/common/back.gif
是不是给编译器优化掉了

请详细说说

xi_liang 发表于 2012-12-7 19:33:43

ddaiss 发表于 2012-12-7 18:36 static/image/common/back.gif
请详细说说

你单步调试,看能不能跑到这里函数里面,不能的话就证明可能给编译器优化掉了

ddaiss 发表于 2012-12-7 20:12:41

xi_liang 发表于 2012-12-7 19:33 static/image/common/back.gif
你单步调试,看能不能跑到这里函数里面,不能的话就证明可能给编译器优化掉了 ...

不能进函数,因为比较值不为零呀

ddaiss 发表于 2012-12-8 10:30:42

xi_liang 发表于 2012-12-7 19:33 static/image/common/back.gif
你单步调试,看能不能跑到这里函数里面,不能的话就证明可能给编译器优化掉了 ...

如果被编译器优化掉了,该如何解决呢

xi_liang 发表于 2012-12-8 13:58:37


以keil为例,把优化等级降低,改为level0或者default

ddaiss 发表于 2012-12-8 18:13:32

xi_liang 发表于 2012-12-8 13:58 static/image/common/back.gif
以keil为例,把优化等级降低,改为level0或者default

俺是新手呀,CCS3.3里莫有找到{:cry:}
页: [1]
查看完整版本: 讨论strncmp