计算字符数组长度

猪皮冻 2012-11-11 02:29:52
#include<iostream>
using namespace std;
int count(char p[])
{int i=0;
while(p[i]!='\0')
i++;
return i-1;
}

void main()
{
char cc[]={'a','a','a','a','a','a','a','a','a','a','e'};
int num=count(cc);
cout<<"数组长度"<<num<<endl;
}

数组本来是11个值,最后输出的是14,不明白问题在哪里,高手们帮忙看一下吧
...全文
306 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
YouNeverCanTell 2012-11-11
  • 打赏
  • 举报
回复
#include<iostream> using namespace std; int count(char p[]) {int i=0; while(p[i]!='\0') i++; return i-1; } 说的对 你这个count()方法以0为结束条件,但是你并没有给这个数组末尾赋值0 可手动加上0,或者写成char cc[]="aaaaaaaaaae"系统自动补0;
newtee 2012-11-11
  • 打赏
  • 举报
回复
引用 13 楼 mghhz816210 的回复:
引用 12 楼 anhuizhuanjiao 的回复:你只判断了p[i]!='\0','e'后面的内容你又没有指定是'\0',求出来的当然是不对的啊 那为什么换成字符串格式就可以了
字符串默认末尾为'\0' 比如 a[4]="123"; 即 a[0]='0' ....a[3]='\0'
猪皮冻 2012-11-11
  • 打赏
  • 举报
回复
引用 13 楼 mghhz816210 的回复:
引用 12 楼 anhuizhuanjiao 的回复:你只判断了p[i]!='\0','e'后面的内容你又没有指定是'\0',求出来的当然是不对的啊 那为什么换成字符串格式就可以了
明白了
猪皮冻 2012-11-11
  • 打赏
  • 举报
回复
引用 12 楼 anhuizhuanjiao 的回复:
你只判断了p[i]!='\0','e'后面的内容你又没有指定是'\0',求出来的当然是不对的啊
那为什么换成字符串格式就可以了
转角天边 2012-11-11
  • 打赏
  • 举报
回复
你只判断了p[i]!='\0','e'后面的内容你又没有指定是'\0',求出来的当然是不对的啊
转角天边 2012-11-11
  • 打赏
  • 举报
回复
引用 7 楼 mghhz816210 的回复:
引用 2 楼 anhuizhuanjiao 的回复:指针越界了,遇到\0才返回的 把 char cc[]={'a','a','a','a','a','a','a','a','a','a','e'}; 改成char cc[]="aaaaaaaaaae";就可以了 什么是指针越界了?
其实不是叫指针越界了,是指针指向了'e'后面的内容,但是你程序里'e'后面的内容是未知的
newtee 2012-11-11
  • 打赏
  • 举报
回复
#include<stdio.h>
void main()
{
    char cc[]={'a','a','a','a','a','a','a','a','a','a','e'};
    printf("%d",sizeof(cc)/sizeof(char));
}
#include<iostream>
using namespace std;
int count(char p[])
{int i=0;
 while(p[i]!='\0')
     i++;
 return i;
}
 
void main()
{
    char cc[]={'a','a','a','a','a','a','a','a','a','a','e','\0'};
    int num=count(cc);
    cout<<"数组长度"<<num<<endl;
}
猪皮冻 2012-11-11
  • 打赏
  • 举报
回复
引用 6 楼 lei001 的回复:
strlen 函数是计算字符串长度的;sizeof是计算数组大小的
strlen求出来是11,sizeof求出来的是12,这是为什么呢?
猪皮冻 2012-11-11
  • 打赏
  • 举报
回复
引用 3 楼 jgwen 的回复:
C语言风格的字符串会以'\0'结尾。 但是你定义的不是。
那我要怎样判断是否结尾
猪皮冻 2012-11-11
  • 打赏
  • 举报
回复
引用 2 楼 anhuizhuanjiao 的回复:
指针越界了,遇到\0才返回的 把 char cc[]={'a','a','a','a','a','a','a','a','a','a','e'}; 改成char cc[]="aaaaaaaaaae";就可以了
什么是指针越界了?
lei001 2012-11-11
  • 打赏
  • 举报
回复
strlen 函数是计算字符串长度的;sizeof是计算数组大小的
newtee 2012-11-11
  • 打赏
  • 举报
回复
return i;
newtee 2012-11-11
  • 打赏
  • 举报
回复
char cc[]={'a','a','a','a','a','a','a','a','a','a','e','\0'};
jgwen 2012-11-11
  • 打赏
  • 举报
回复
C语言风格的字符串会以'\0'结尾。 但是你定义的不是。
转角天边 2012-11-11
  • 打赏
  • 举报
回复
指针越界了,遇到\0才返回的 把 char cc[]={'a','a','a','a','a','a','a','a','a','a','e'}; 改成char cc[]="aaaaaaaaaae";就可以了
猪皮冻 2012-11-11
  • 打赏
  • 举报
回复
自己先顶下。。。。

64,282

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧