C语言求字符串长度的问题

#include<stdio.h>main(){chara,*p;intb=0,n;p=&a;scanf("%s",&a);for(n=0;*(p+n)!='\0';n+... #include<stdio.h>
main()
{
char a,*p;
int b=0,n;
p=&a;
scanf("%s",&a);
for(n=0;*(p+n)!='\0';n++)b++;
printf("%d\n",b);
}
输入5个或5个以上字符时 运行结果出来后就会提示遇到问题要关闭 5个以下就不会的 为什么呢
展开
 我来答
seahorse47
2008-05-04 · TA获得超过182个赞
知道小有建树答主
回答量:62
采纳率:0%
帮助的人:112万
展开全部
你的代码出现问题的原因是scanf("%s",&a); ,a是一个char类型的变量,系统为它分配了一个字节的内存空间,但是你却输入了一个字符串到以a的地址为首地址的一段连续的内存空间里,这样就出现了越界错误.但是printf函数并不检查越界错误,它会按正常的方法执行,然后程序统计出长度,打印出来结果.但是返回到调用main函数的操作系统后,系统会发现越界错误,所以在结果显示出来后才出错.至于你说的输入5个以下不会出错,也许是偶然,也许跟你的编译器有关.我用VS2005测试,只要输入就会出错。
如果你是只想求出输入的字符串的长度而不要求保存输入的字符串,下面的代码更好。你的标准输入缓冲区有多大,那么它就可以求出多长的字符串的长度,不会有越界。

#include<stdio.h>

int main()
{
int len=0;

//getchar()函数从标准输入设备(即键盘)接收一个字符,返回该字符的ASCII码.因为回车被输入时被转换成换行符(LF,ASCII码为10),所以getchar()返回10时就知道输入结束了.
while(getchar()!=10) len++;
printf("It's length is %d.\n",len);
return 0;
}
_野香蕉_
2008-05-04 · TA获得超过3305个赞
知道大有可为答主
回答量:3567
采纳率:50%
帮助的人:1190万
展开全部
#include<stdio.h>
main()
{
char a,*p; //你这个a是一个字符变量,不能用来存字符串。字符串要字符数组。a[1000]; 大小看你要求变。
int b=0,n;
p=&a; //这里a是数组首地址,所以这里改p=a;就可以
scanf("%s",&a); //这里scanf("%s",a);
for(n=0;*(p+n)!='\0';n++)b++;
printf("%d\n",b);
}

这样
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
happycxz
2008-05-04 · TA获得超过3146个赞
知道大有可为答主
回答量:3121
采纳率:0%
帮助的人:1629万
展开全部
问题可能出现在:scanf("%s",&a); 这一句上面。关于地址分配。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
在太平塔蹦极的三角枫
2008-05-04 · TA获得超过104个赞
知道小有建树答主
回答量:153
采纳率:0%
帮助的人:70.6万
展开全部
#include<stdio.h>
main()
{
char a[100],*p; \\输入字符串的时候应该以数组的形式.
int n;
p=a;
scanf("%s",a);
for(n=0;*(p+n)!='\0';n++); \\可以不使用变量b,直接用n做记数变量.
printf("%d\n",n);
}

编译通过.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
liu_pu
2008-05-05 · TA获得超过411个赞
知道答主
回答量:130
采纳率:0%
帮助的人:0
展开全部
错误有两个!
1.char型的字符变量a只代表一个字符,不能代表一个字符串。
2.用scanf输入字符串时,出了个控制符要用%s外,后面的应是个地址。若a是个字符数组,应该用a,而不是&a。况且用scanf输入时不能输入空格。
你可以这样编:
#include<stdio.h>
#include<string.h>
void main()
{
char a[80],*p;
int n;
p=a;
gets(a);
for(n=0;*p!='\0';p++,n++);
printf("It's length is %d",n);
}
visual c++编译通过,希望能帮助你
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(5)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式