关于数组,字符串的问题
下面的问题不好理解,请各位大虾指点!
................................
第一种情况:
#include <iostream.h>
#include <string.h>
void main()
{
char a[5]={ 'a ', 'b ', 'c ', 'd ', 'e '};
char *b= "abcdef ";
//char b[7]= "abcdef ";
cout < <strlen(a) < < "--- " < <sizeof(a) < < "--- " < <strlen(b) < < "--- " < <sizeof(b) < <endl;
char c[5];//?
strcpy(c,b);
cout < <c < < "--- " < <b < <endl;
}
运行结果:11---5---6---4
abcdef---abcdef
.....................................
第二种情况:
#include <iostream.h>
#include <string.h>
void main()
{
char a[5]={ 'a ', 'b ', 'c ', 'd ', 'e '};
//char *b= "abcdef ";
char b[7]= "abcdef ";
cout < <strlen(a) < < "--- " < <sizeof(a) < < "--- " < <strlen(b) < < "--- " < <sizeof(b) < <endl;
char c[5];//?
strcpy(c,b);
cout < <c < < "--- " < <b < <endl;
}
结果为:
11---5---6---7
abcdef---abcdef
........................
请问为什么strlen(a)会为11? 数组c只有5位,为何输出abcdef ?
为什么第一种情况sizeof(b)为4,第二种情况为7?
[解决办法]
cout < <c < < "--- " < <b < <endl;
============
越界,找到null字符时才停止,显示随机变化
[解决办法]
sizeof(b)
=====
b是个字符指针变量,所以4
[解决办法]
请问为什么strlen(a)会为11,b第二种情况为7
=====================
对于数组名sizeof表达式求出的是数组元素的个数
[解决办法]
进来插句话 好让todototry() 继续发言
:)
[解决办法]
3xs,发言完毕,^_^
[解决办法]
1 为什么strlen(a)会为11:
strlen计算长度是一 '\0 '为结束符的,所以你strlen(a)得到的结果
将是不确定的,可能是11也可能是其他值
2 数组c只有5位,为何输出abcdef :
标准strcpy函数并不做越界检查,这是程序员(即你自己应该做的事情)
虽然输出是正确的,但是数组越界是很严重的错误,很多编译器会给出越界
的严重警告
2 为什么第一种情况sizeof(b)为4,第二种情况为7
第一种情况b代表一个指针,sizeof(b)表示指针变量自身需要的空间,所以是4个字节
第二种情况b代表一个字符数组,长度为7,所以sizeof(b)为7