c语言,计算字符串长度

NO.1charx[12]="ab\n\\012\\\";printf("%d",strlen(x));答案:9NO.2charstring[]="ab\0123";pr... NO.1 char x[12]="ab\n\\012\\\"; printf("%d",strlen(x)); 答案:9 NO.2 char string[]="ab\0123"; printf("%d",strlen(string)); 答案:2 NO.3 char string[]="\t\"\085\xff\n"; printf("%d",strlen(string)); 答案:2 麻烦给个详解!谢谢! 展开
 我来答
布玉文慈
2019-12-20 · TA获得超过3.1万个赞
知道大有可为答主
回答量:1.2万
采纳率:30%
帮助的人:907万
展开全部
你的代码出现问题的原因是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;
}
百度网友59164cf295e
2019-09-13 · TA获得超过3500个赞
知道大有可为答主
回答量:3095
采纳率:31%
帮助的人:394万
展开全部
首先是你的No1:
char
x[12]="ab\n\\012\\\";
这句貌似是错误的,调试不能通过。在结尾加上n就是改为:char
x[12]="ab\n\\012\\\n";后程序才能运行。结果是9的原因是:
for(i
=
0;i<10;i++){
printf("%c,",x[i]);}
在程序中加入这句话就明白了。
显示的字符依次为

a,b,换行,\,1,2,\,\,换行。
后面的同理你加上for(i
=
0;i<10;i++){
printf("%c,",x[i]);}
这句话
自己调试什么都明白了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式