C语言,输入字符串计算字符长度

#include<stdio.h>#include<stdlib.h>#include<string.h>intmain(){chara[50];inti=0,*j;ge... #include<stdio.h> #include<stdlib.h> #include<string.h> int main() { char a[50]; int i=0,*j; gets(a);//输入字符串 j=a; while(*j!='\0') { j++;//指针指向下一个数组字符 i++; } printf("字符串为%s,字符串的长度为%d",a,i); system("pause"); } 不管我输入什么字符,它显示的i一直都是21不会变的,(i为计算字符长度的变量) 展开
 我来答
布玉文慈
2019-12-20 · TA获得超过3.1万个赞
知道大有可为答主
回答量:1.2万
采纳率:30%
帮助的人:912万
展开全部
你的代码出现问题的原因是scanf("%s",&a);
,a是一个char类型的变量,系统为它分配了一个字节的内存空间,但是你却输入了一个字符串到以a的地址为首地址的一段连续的内存空间里,这样就出现了越界错误.但是printf函数并不检查越界错误,它会按正常的方法执行,然后程序统计出长度,打印出来结果.但是返回到调用main函数的操作系统后,系统会发现越界错误,所以在结果显示出来后才出错.至于你说的输入5个以下不会出错,也许是偶然,也许跟你的编译器有关.我用VS2005测试,只要输入就会出错。
如果你是只想求出输入的字符串的长度而不要求保存输入的字符串,下面的代码更好。你的标准输入缓冲区有多大,那么它就可以求出多长的字符串的长度,不会有越界。
#include
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;
}
奉铭奉涵忍
2019-07-15 · TA获得超过3773个赞
知道大有可为答主
回答量:3080
采纳率:32%
帮助的人:383万
展开全部
int
i=0,*j;
定义了一个整型指针变量j,j++会跳过一个整型数据空间(4)
修改成char
*j;就好了。这样j++会跳过一个字符型数据空间(1),才能正确遍历数组!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式