C语言求字符串长度的问题
#include<stdio.h>main(){chara,*p;intb=0,n;p=&a;scanf("%s",&a);for(n=0;*(p+n)!...
#include<stdio.h> main() { chara,*p; intb=0,n; p=&a; scanf("%s",&a); for(n=0;*(p+n)!='\0';n++)b++; printf("%d\n",b); } 输入5个或5个以上字符时运行结果出来后就会提示遇到问题要关闭5个以下就不会的为什么呢
展开
1个回答
展开全部
你的代码出现问题的原因是scanf("%s",&a);,a是一个char类型的变量,系统为它分配了一个字节的内存空间,但是你却输入了一个字符串到以a的地址为首地址的一段连续的内存空间里,这样就出现了越界错误.但是printf函数并不检查越界错误,它会按正常的方法执行,然后程序统计出长度,打印出来结果.但是返回到调用main函数的操作系统后,系统会发现越界错误,所以在结果显示出来后才出错.至于你说的输入5个以下不会出错,也许是偶然,也许跟你的编译器有关.我用VS2005测试,只要输入就会出错。
如果你是只想求出输入的字符串的长度而不要求保存输入的字符串,下面的代码更好。你的标准输入缓冲区有多大,那么它就可以求出多长的字符串的长度,不会有越界。
#include<stdio.h>
intmain()
{
intlen=0;
//getchar()函数从标准输入设备(即键盘)接收一个字符,返回该字符的ASCII码.因为回车被输入时被转换成换行符(LF,ASCII码为10),所以getchar()返回10时就知道输入结束了.
while(getchar()!=10)len++;
printf("It'slengthis%d.\n",len);
return0;
}
如果你是只想求出输入的字符串的长度而不要求保存输入的字符串,下面的代码更好。你的标准输入缓冲区有多大,那么它就可以求出多长的字符串的长度,不会有越界。
#include<stdio.h>
intmain()
{
intlen=0;
//getchar()函数从标准输入设备(即键盘)接收一个字符,返回该字符的ASCII码.因为回车被输入时被转换成换行符(LF,ASCII码为10),所以getchar()返回10时就知道输入结束了.
while(getchar()!=10)len++;
printf("It'slengthis%d.\n",len);
return0;
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询