深圳益田村数码照相馆:c++中的一个小问题

来源:百度文库 编辑:查人人中国名人网 时间:2024/05/06 00:36:56
# include <iostream.h>
# include <string.h>
void main()
{
char s1[]="abc mnp";
char *s2="hello!";
char s3[80];
cout<<"Input a word:";
cin>>s3;
cout<<"s1:"<<strlen(s1)<<endl;
cout<<"s2:"<<strlen(s2)<<endl;
cout<<"s3:"<<strlen(s3)<<endl;
cout<<strlen("iostream.h");
}
两个疑问:
1.strlen中的参数不是数组名么,s2应该是指针吧,怎么能做strlen函数的参数呢?而且s2是指向hello!这个字符数组还是赋值为hello!?请详细解释.
2.当输入s3为abc mnp时,输出s3:3而s1:7这是为什么啊?

1. 其实strlen的参数是一个内存地址,从这个地址一直计数到碰到'\0'结束,返回长度,至于你这个地址是怎么表现的它是不管的,你可以把数组名附给它表示数组的首地址,或者可以直接给它一个指针,这个指针指向某个内存段的首地址.(一个极端的好玩的试验,你把一个函数名付给它也是可以的)

2.cin默认是以空格(0x20)作为输入分隔符号的,也就是abc mnp其实算2个输入,由于你只提供了1个地址,所以mnp就被省略了.你可以这么试下:定义1个s4[80]
然后 cin>>s3>>s4;你查s4的值就是mnp了.

strlen参数可以做为数组 也可以是指针,strlen是计算变量值为起点的内存地址到第一个'\0'的距离,以字节为单位,字符串尾部为'\0',0=='\0',当输入s3为abc mnp的时候中间有个空格,即0 因为0=='\0' 所以strlen的计算截止,所以为3 而数组s1[]="abc mnp"已经在第4位赋予了非零值 ... 大概这么解释吧```专业的我不懂

1.c里面数组就是指针,是一个常量指针(const type*,就是说char s[],p[];s=p;是不允许的,常量不允许被赋值)。经常外面可以看到这样的合法代码:char s[],*p=s;
2.测长度是测到'\0'为止而不是空格为止,所以s1:7。至于s3,cin>>s3,这句输入语句碰到空格就返回,因此你输入abc mnp,s3实际储存的只有abc,那当然s3:3了

strlen 是测字符串长度的函数,送返测字符串长度。
它的参数是“const char“型 指针
strlen(const char *);
因为是常数型字符指针。s1和s3的指针就是s1[0]和s3[0]的指针。

s2是指针,并分配了单元,初值是"hello!"。
程序中,你既可用 *s2, 也可用数组形式 s2[i]
例如 cout << s2[1] << endl;
你会得到e

输入s3为abc mnp时,输出s3:3
因为输入时默认以空白为输入元素的分隔符,打入abc mnp,表示打入了两个元素,第一是abc,第二是mnp.

如果想输入中包括空白号,要用双引号括起来:
"abc mnp" -- 它是一个字符串,含7个字符,包括空白。