脑出血两年能吃海参吗:菜鸟级C++问题

来源:百度文库 编辑:高校问答 时间:2024/04/28 03:49:37
char*p="abcdefgh";
p+3,
cout<<strlen(strcpy(p,"abcd"));
答案为什么是4 应该是12吧

不要受前两句的影响
第三句,strcpy把"abcd"复制到p,这时p中有数据a,b,c,d,\0,当然后面还有但我们不用管。
而strlen语句用来计算字符串长度,原理是从头数到“/0”,后面的就不再数
其结果就是 4
因为只数了a b c d

你要注意:
1第一句是让字符指针指向一个常量字符串
2第二句实际上是一个没有任何效果的语句
3第三句是先将字符串abcd拷贝给字符指针p然后计算
p所指向字符串的长度

该题主要是看你对strcpy()函数的理解.
要注意strcpy()函数在拷贝完字符串后是要加一个结尾符
'\0'的.
所以strcpy(参数1,参数2);调用的时候一定要注意:
参数1(字符串)的长度一定要比参数2(字符串)的长度
大至少1才不会出问题.!

char* strcpy(char* p,const char* q)
strcpy函数的功能是把字符串q复制到p中,并不是你想象的是将两个字符串连接起来。
因此p中储存的是字符串"abcd"的首地址
另外这个函数的返回值是复制后p的内容(也就是字符串的首地址)
因此这个返回值指向"abcd"因此结果是4

char*p="abcdefgh";
这句p指向"abcdefgh"这个字符串的首地址

p+3,
这句把p指向的地址向前移动了3个char的长度.p本来指向存放a的内存空间,现在指向存放d的内存空间了.所以现在p指向的应该是"defgh"

cout<<strlen(strcpy(p,"abcd"));
这句strcpy(p,"abcd")把p开始的内存前5个char换成了"abcd"(因为是字串,所以"abcd"最后还有个'\0'),这个时候p字串从"defgh\0"变成了"abcd\0\0"由于字符串碰到\0就结束了,所以实际strlen计算长度是到第一个'\0'为止,strlen计算的长度是不包括这个\0的,所以就是abcd的长度4

BTW:楼上的XD该隐_堕的名字,难道出自"升龙道"中的那个老吸血鬼?哈哈,有意思

鬼火狼烟哪,p+3没有改变p的指向呀
变成4是因为*p="abcd"了

不过这段程序有问题,p开始指向的是常量,strcpy对常量存储区的内容进行了修改。

char*p="abcdefgh";
p+3,
cout<<strlen(strcpy(p,"abcd")); //把abcd拷贝到*p上
所以求长为4