TC编译程序返回错误信息?!
程序如下:main()
{
char s[10]="hello";
char s1[10]="ok,see you";
clrscr();
printf("%d\n%d",strlen(s),strlen(s1));
}
输入竟然为
5
15
有没有人愿意解释一下啊?
----------------解决方案--------------------------------------------------------
"%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字符了。
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的函数定义,自己仔细领略了.
----------------解决方案--------------------------------------------------------
其实字符串,他在后面有个默认的值,也就是空值。表示字符串的结束标志。
----------------解决方案--------------------------------------------------------