| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1683 人关注过本帖
标题:char A[200],然后初始化,为何strlen(A)等于203?
只看楼主 加入收藏
crazycoder
Rank: 1
来 自:长春
等 级:新手上路
帖 子:36
专家分:0
注 册:2008-11-20
收藏
 问题点数:0 回复次数:8 
char A[200],然后初始化,为何strlen(A)等于203?
#include <stdio.h>
#include <string.h>
void main()
{
    char * p = new char[10];
    printf("%d",strlen(p));
    delete [] p;
}
//输出结果为105,我把char[100]改为char[10]时,输出则是14,为什么?
//对strlen()了解的真是一知半解,谁能指点我一下?谢了。

///////////////////////////////////////////////////////////////////
现把程序改为:
#include <iostream>
#include <string>
using namespace std;
const int size = 350;
int main()
{
    char A[size];
    for(int i = 0; i < size; i++)
    {
        A[i] = 's';
    }
    cout << strlen(A) << endl;
    cout << sizeof(A) << endl;
         return 0;
}
我的电脑上输出结果是355    350
然后我再把char A[350];改为char A[200];输出结果变为203   200
strlen()和sizeof()应该只差一个\0的长度吧?  所以我还是没弄明白。

[[it] 本帖最后由 crazycoder 于 2008-11-26 21:10 编辑 [/it]]
搜索更多相关主题的帖子: strlen 
2008-11-26 14:54
lonmaor
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:郑州
等 级:版主
威 望:75
帖 子:2637
专家分:6423
注 册:2007-11-27
收藏
得分:0 
我认为:
未初始化的字符数组,得到的字符串长度无意义。

从不知道到知道,到知道自己不知道,成长的道路上脚步深深浅浅
2008-11-26 15:05
pascale
Rank: 1
等 级:新手上路
帖 子:45
专家分:0
注 册:2008-9-9
收藏
得分:0 
我这里输出0
2008-11-26 15:29
WorldOfGoo
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2008-11-25
收藏
得分:0 
得到的是一个garbage,未初始化数组
2008-11-26 16:38
crazycoder
Rank: 1
来 自:长春
等 级:新手上路
帖 子:36
专家分:0
注 册:2008-11-20
收藏
得分:0 
现把程序改为:
#include <iostream>
#include <string>
using namespace std;
const int size = 350;
int main()
{
    char A[size];
    for(int i = 0; i < size; i++)
    {
        A[i] = 's';
    }
    cout << strlen(A) << endl;
    cout << sizeof(A) << endl;
         return 0;
}

我的电脑上输出结果是355    350
然后我再把char A[350];改为char A[200];输出结果变为203   200
strlen()和sizeof()应该只差一个\0的长度吧?  所以我还是没弄明白。

[[it] 本帖最后由 crazycoder 于 2008-11-26 21:11 编辑 [/it]]

Breath deeply, three times a day, hold on for one year----我要说的是:坚持真的是件很难的事。
2008-11-26 16:58
WorldOfGoo
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2008-11-25
收藏
得分:0 
10
350
请按任意键继续. . .
这个是输出呀。。。没错呀
strlen(A)表示字符串长度,sizeof(A)就是数组大小
2008-11-26 17:14
h13077395959
Rank: 1
等 级:新手上路
威 望:1
帖 子:26
专家分:0
注 册:2007-11-16
收藏
得分:0 
strlen()计算字符长度,一直到字符为'\0'之前;sizeof()计算内存的大小;
    char A[350];  // 内存大小为350
    for(int i = 0; i < 10; i++)
    {
        A[i] = 's';
    }
   由于数组A中没有'\0',出现内存错误。
   注意c语言字符串与字符串数组的区别,strlen只针对前者
2008-11-26 19:19
newyj
Rank: 2
等 级:新手上路
威 望:3
帖 子:542
专家分:0
注 册:2008-1-4
收藏
得分:0 
在 未初始化的数组中 的元素是无意义的 而 strlen()是靠 '\0' 来判断 字符串的长短
这就要看 这个数组中 在什么位置 正好有个 '\0' 了
2008-11-26 19:52
crazycoder
Rank: 1
来 自:长春
等 级:新手上路
帖 子:36
专家分:0
注 册:2008-11-20
收藏
得分:0 
多谢8楼,现在把程序改成这样:
#include <iostream>
#include <string>
using namespace std;
const int size = 200;
int main()
{
    char A[size+1];
    for(int i = 0; i < size; i++)
    {
        A[i] = 's';
    }
    A[size] = '\0';
    cout << strlen(A) << endl;
    cout << sizeof(A) << endl;
         return 0;
}
输出就跟预期一样了,为200   201

Breath deeply, three times a day, hold on for one year----我要说的是:坚持真的是件很难的事。
2008-11-26 21:18
快速回复:char A[200],然后初始化,为何strlen(A)等于203?
数据加载中...
 
   



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

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