| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 6095 人关注过本帖
标题:用strlen计算字符串长度结果不对[问题已解决]
只看楼主 加入收藏
yuezhuying
Rank: 2
等 级:论坛游民
帖 子:115
专家分:10
注 册:2008-9-13
结帖率:100%
收藏
 问题点数:0 回复次数:11 
用strlen计算字符串长度结果不对[问题已解决]
程序代码:
/* 计算字符串长度*/
#include <stdio.h>

int strlen(char *str)
{
    int i;

    for( i = 0; str[i] != '\0'; i ++ )    /* 用循环计算长度 */
    return i;
}

int main(void)
{
    char string[100];        /* 字符串数组声明 */
    int len;                /* 字符串长度 */

    printf("请输入字符串==>");
    gets(string);            /* 读取字符串 */
    len = strlen(string);    /* 计算字符串长度 */
    printf("输入字符串的长度是%d\n", len);
}

编译成功,但运行后无论输入什么字符串,计算结果都为0。请问代码哪里不对?
这代码是在《数据结构C语言-铁道出版社》电子书里看到的。

原因:在strlen函数中的for语句后面少了个分号。

[[it] 本帖最后由 yuezhuying 于 2008-11-21 20:55 编辑 [/it]]
搜索更多相关主题的帖子: strlen 字符 长度 结果 
2008-11-21 20:08
永夜的极光
Rank: 6Rank: 6
等 级:贵宾
威 望:27
帖 子:2721
专家分:1
注 册:2007-10-9
收藏
得分:0 
for后面少了一个分号

改成

    for( i = 0; str[i] != '\0'; i ++ )    /* 用循环计算长度 */
      ;//注意,这里的分号表示空语句,也就是什么都不干
    return i;

从BFS(Breadth First Study)到DFS(Depth First Study)
2008-11-21 20:17
yuezhuying
Rank: 2
等 级:论坛游民
帖 子:115
专家分:10
注 册:2008-9-13
收藏
得分:0 
原来如此~我平常在写代码时都不会给for后面加上分号,忘了还有这种情况,难怪我无论怎么看代码都找不到这错误~~
谢谢极光的指点~~
2008-11-21 20:27
zqy110007
Rank: 3Rank: 3
来 自:外太空
等 级:论坛游民
威 望:6
帖 子:1493
专家分:82
注 册:2008-11-19
收藏
得分:0 
首先说一点...
我记得在头文件<string.h>中有一个strlen函数,如果你是要自己写的话也可以咯
你这个肯定是0啦看
在自定义函数的for循环里面i=0,然后第一个字符无论是不是'\0'它就已经返回了i
也就是说这个代码就相当于
int i=0;
return i;
你仔细想一想i和for的关系,同楼上的..应该改成
程序代码:
/* 计算字符串长度*/
#include <stdio.h>

int strlen(char *str)
{
    int i;

    for( i = 0; str[i] != '\0'; i ++ )
        ;                             /*不执行代码,只让i继续++*/
    return i;
}

int main(void)
{
    char string[100];
    int len;

    printf("请输入字符串==>");
    gets(string);
    len = strlen(string); 
    printf("输入字符串的长度是%d\n", len);
}

每个人都是蛤蟆,只是井的大小不同罢了.
沙石下的泉水,挖得越深,泉水越清.
2008-11-21 20:31
yuezhuying
Rank: 2
等 级:论坛游民
帖 子:115
专家分:10
注 册:2008-9-13
收藏
得分:0 
刚刚去翻了一下C语言的书,找了一下strlen函数,照书上说的改了一下代码,也可以运行。就是加上头文件和去掉自定义的strlen函数。
程序代码:
#include <stdio.h>
#include <string.h>

int main(void)
{
    char string[100];        /* 字符串数组声明 */
    int len;                /* 字符串长度 */

    printf("请输入字符串==>");
    gets(string);            /* 读取字符串 */
    len = strlen(string);    /* 计算字符串长度 */
    printf("输入字符串的长度是%d\n", len);
}


那个for语句,我以为return i;是它的语句。
现在明白了,是自己理解错了。谢谢007的指点。
2008-11-21 20:49
风居住的街道
Rank: 1
等 级:新手上路
帖 子:374
专家分:0
注 册:2008-10-24
收藏
得分:0 
人家是要自己实现一个strlen的……
int strlen(const char *str)
{
    int i = 0;
    while (*str++ != '\0')
        i++;
    return i;
}

[[it] 本帖最后由 风居住的街道 于 2008-11-21 22:15 编辑 [/it]]
2008-11-21 22:09
yuezhuying
Rank: 2
等 级:论坛游民
帖 子:115
专家分:10
注 册:2008-9-13
收藏
得分:0 
谢谢LS, 又学了一招,再次明白for和while可以互相替换的用,不过指针方面就头疼了~~
2008-11-21 22:42
zqy110007
Rank: 3Rank: 3
来 自:外太空
等 级:论坛游民
威 望:6
帖 子:1493
专家分:82
注 册:2008-11-19
收藏
得分:0 
呵呵,有问题又来就是的啦

每个人都是蛤蟆,只是井的大小不同罢了.
沙石下的泉水,挖得越深,泉水越清.
2008-11-22 12:41
crazycoder
Rank: 1
来 自:长春
等 级:新手上路
帖 子:36
专家分:0
注 册:2008-11-20
收藏
得分:0 
学C++,学着学着就晕了

Breath deeply, three times a day, hold on for one year----我要说的是:坚持真的是件很难的事。
2008-11-22 14:46
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
C++的学习,只需要掌握其中心的四个设计模式,就可以很简单地从全局去把握自己的学习目标了。了解大概以后,再根据专题,进行有针对的提高。总可以学得很好的。

专心编程………
飞燕算法初级群:3996098
我的Blog
2008-11-22 15:53
快速回复:用strlen计算字符串长度结果不对[问题已解决]
数据加载中...
 
   



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

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