标题:为什么strelen(a)的长度会是25?
只看楼主
microyahoo
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2010-5-24
结帖率:100%
 问题点数:0 回复次数:7 
为什么strelen(a)的长度会是25?
#include "stdafx.h"
#include "stdio.h"
#include "string.h"


int _tmain(int argc, _TCHAR* argv[])
{
    char c[15]="pascal program";
    char b[6]="hello";
    char a[10]={'a',' ','t','f','f','u','k','s','w','w'};
    strcpy(c,b);
    printf("%s",c);
    printf(" %d %d\n",strlen(c),strlen(a));
    return 0;
}
搜索更多相关主题的帖子: 皮肤 湿疹 include pascal return 
2011-07-03 16:43
hjywyj
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:3
帖 子:1114
专家分:2611
注 册:2010-4-14
得分:0 
楼主定义的a是字符串吗?
2011-07-03 17:43
lz1091914999
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:四川
等 级:贵宾
威 望:37
帖 子:2011
专家分:5959
注 册:2010-11-1
得分:0 
这说明a的后面26个字节处的字节是0

My life is brilliant
2011-07-03 17:58
makebest
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:3
帖 子:658
专家分:962
注 册:2005-3-17
得分:0 
完全是使用不当,没有别的.
2011-07-03 20:25
weiwei555
Rank: 5Rank: 5
来 自:中国
等 级:职业侠客
帖 子:179
专家分:323
注 册:2011-3-4
得分:0 
发现strelen(a)的值有多种,不同编译器的时候
2011-07-03 22:15
oszc
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:111
专家分:154
注 册:2011-4-15
得分:0 
char a[10]={'a',' ','t','f','f','u','k','s','w','w'}; 越界了,10个都是字符最后也没有结束标记'\0'
2011-07-04 01:15
烟雾中的迷茫
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
帖 子:621
专家分:1069
注 册:2011-2-9
得分:0 
回复 楼主 microyahoo
因为a数组不里字符串没有结束标志因此a数组后面的值是不1确定的Strlen函数求长度时遇到\o才结束.因此a的长度不确定
2011-07-04 09:05
lz1091914999
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:四川
等 级:贵宾
威 望:37
帖 子:2011
专家分:5959
注 册:2010-11-1
得分:0 
'\0'用来标示一个字符串结尾,'\0'的值就是0,所以strlen()函数就可以写成这样:
程序代码:
typedef size_t unsigned;

size_t strlen(const char * str) {
    size_t count = 0;
    while(*str++)
        count++;
    return count;
}
而在内存中被置0的字节有很多,所以即使在str的末尾没有'\0',这个函数也会很快执行完毕,即使结果是错误的。


My life is brilliant
2011-07-04 12:55



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-344599-1-1.html




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

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