首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

关于数组,字符串的有关问题

2012-03-09 
关于数组,字符串的问题下面的问题不好理解,请各位大虾指点!................................第一种情况:#

关于数组,字符串的问题
下面的问题不好理解,请各位大虾指点!
................................
第一种情况:
#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

热点排行