当前位置: 代码迷 >> C语言 >> TC编译程序返回错误信息?!
  详细解决方案

TC编译程序返回错误信息?!

热度:144   发布时间:2006-06-14 14:05:06.0
TC编译程序返回错误信息?!
程序如下:
main()
{
char s[10]="hello";
char s1[10]="ok,see you";
clrscr();
printf("%d\n%d",strlen(s),strlen(s1));
}
输入竟然为
5
15
有没有人愿意解释一下啊?
搜索更多相关的解决方案: 编译程序  strlen  main  char  clrscr  

----------------解决方案--------------------------------------------------------
"%d\n%d"??
输出的格式不对啊 应该是%s不
----------------解决方案--------------------------------------------------------
char s1[10]="ok,see you"; //字符串长度越界了。字符串后面必须要有NULL来作为结束符。
//在楼主这个例子中,字符串长度为10,而字符数组长度是10,
//所以没有空间来存放NULL字符了。

----------------解决方案--------------------------------------------------------

[CODE]
int Strlen(char* str) /*一个简易版本*/
{
int n=0;

while(*str++)
n++;
return n;
}
[/CODE]

可见当遇到NULL才返回字符串的长度,不管是字符串本身的,还是越界遇到的
当然:更多的编译器不会迁就这种错误!不能执行


----------------解决方案--------------------------------------------------------
/*要想输出正常,请作以下改动*/
main()
{
char s[10]="hello";
/*把char s1[10]="ok,see you";改成*/
char s1[11]="ok,see you";
/*或者char s1[]="ok,see you";也行*/
clrscr();
printf("%d\n%d",strlen(s),strlen(s1));
}
----------------解决方案--------------------------------------------------------
以下是引用lj_860603在2006-6-14 14:43:46的发言:
char s1[10]="ok,see you"; //字符串长度越界了。字符串后面必须要有NULL来作为结束符。
//在楼主这个例子中,字符串长度为10,而字符数组长度是10,
//所以没有空间来存放NULL字符了。

ok,see you长度为10啊,怎么会超越长度了呢?
况且我定义的为char s1[10]啊?
----------------解决方案--------------------------------------------------------

以下是引用chenzhao在2006-7-3 12:58:52的发言:

ok,see you长度为10啊,怎么会超越长度了呢?
况且我定义的为char s1[10]啊?

其实前面的仁兄可能和我一样也认为see前有一空格,楼上已有人写出了strlen的函数定义,自己仔细领略了.


----------------解决方案--------------------------------------------------------

其实字符串,他在后面有个默认的值,也就是空值。表示字符串的结束标志。


----------------解决方案--------------------------------------------------------