| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 394 人关注过本帖
标题:关于 strlen 问题
只看楼主 加入收藏
brotherand2
Rank: 2
等 级:论坛游民
帖 子:15
专家分:24
注 册:2013-3-16
结帖率:66.67%
收藏
已结贴  问题点数:10 回复次数:5 
关于 strlen 问题
# include<stdio.h>
# include<string.h>
void main()
{
    int len2,j=-1;
    char *t="ssssstttabc";
    len2=strlen(t);
    while(j<strlen(t))
    {
        printf("%c ",t[j]);
        j++;
    }
}

# include<stdio.h>
# include<string.h>
void main()
{
    int len2,j=-1;
    char *t="ssssstttabc";
    len2=strlen(t);
    while(j<len2)
    {
        printf("%c ",t[j]);
        j++;
    }
}
为什么结果不同
搜索更多相关主题的帖子: include 
2014-10-09 17:34
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
收藏
得分:0 
j=-1,  t[j]即t[-1]是什么东西?

总有那身价贱的人给作业贴回复完整的代码
2014-10-09 17:47
brotherand2
Rank: 2
等 级:论坛游民
帖 子:15
专家分:24
注 册:2013-3-16
收藏
得分:0 
以下是引用embed_xuel在2014-10-9 17:47:17的发言:

j=-1,  t[j]即t[-1]是什么东西?

学数据结构中KMP算法,next[0]=-1,j回到next[0]时,
    while(j<strlen(t))
    {
        if(j==-1||s[i]==t[j])//如果j==-1是第进行匹配的串的第1个数不等,i向后移,j指向第一位
        {
            i++;
            j++;
        }
        else
            j=next[j];//j指针往左移
         }
  j因为是-1出问题了,但将strlen(t)换成len2就正确
2014-10-09 18:13
brotherand2
Rank: 2
等 级:论坛游民
帖 子:15
专家分:24
注 册:2013-3-16
收藏
得分:0 
通过debug发现一现也没进入循环,而且不会出现访问t[-1]的情况
2014-10-09 18:20
ditg
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:16
帖 子:852
专家分:1937
注 册:2014-4-10
收藏
得分:10 
strlen类型是unsigned,与有符号数比较时,按无符号数处理,-1为全1,最大,呵呵

梦想拥有一台龙芯3A-4000
2014-10-09 18:47
brotherand2
Rank: 2
等 级:论坛游民
帖 子:15
专家分:24
注 册:2013-3-16
收藏
得分:0 
以下是引用ditg在2014-10-9 18:47:55的发言:

strlen类型是unsigned,与有符号数比较时,按无符号数处理,-1为全1,最大,呵呵

原来如此,平时没用过unsigned 类型,虽然在c++ primer 中看过有符号和无符号比较,无符号优先级高,往上提,会把有符号转变成无符号,int 的-1根据补码知识
-1
0000000 0000000 0000000 0000001
取反
1111111 1111111 1111111 1111110
加1
1111111 1111111 1111111 1111111
结果
2的32次方-1为4 294 967 295
变成很大整数,不知道strlen的返回类型,让我这个程序调试了一个下午
2014-10-09 19:32
快速回复:关于 strlen 问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.049246 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved