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

如题所述

你的代码出现问题的原因是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个回答  2020-04-17
#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);
}
编译通过.
第2个回答  2020-01-28
错误有两个!
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++编译通过,希望能帮助你
第3个回答  2019-07-16
这两个答案肯定是不一样的!
strlen的含义是求字符串的长度,也就是串中的字符数,不包括最后的那,而sizeof的含义是求字符串所占的内存大小,自然要算上最后的那。
因此。。。
strlen
9
分别是0,\(\\,转义字符),1,2,5,回车,a,b,table(空白符)到第一个'\0'时就结束了
strlen
15
内存中是0,\(\\,转义字符),1,2,5,回车,a,b,table(空白符),'\0',a,0,0,'\0','\0'(最后一个是字符串结束的标志)。
有问题的话可以再和我交流。。。。
第4个回答  2019-11-16
#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);
}
这样

相关了解……

你可能感兴趣的内容

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