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 麻烦给个详解!谢谢!
展开
2个回答
展开全部
你的代码出现问题的原因是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;
}
,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;
}
展开全部
首先是你的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]);}
这句话
自己调试什么都明白了
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]);}
这句话
自己调试什么都明白了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询