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

#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个以下就不会的 为什么呢

你的代码出现问题的原因是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;
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2008-05-04
#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);
}

这样
第2个回答  2008-05-04
问题可能出现在:scanf("%s",&a); 这一句上面。关于地址分配。
第3个回答  2008-05-04
#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);
}

编译通过.
第4个回答  2008-05-05
错误有两个!
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++编译通过,希望能帮助你

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网