关于C++指针

来源:百度知道 编辑:UC知道 时间:2024/06/04 20:21:58
#include <iostream.h>

void str(char* str1);

void main(){
char buffer[20];
// cin.getline(buffer,20);
str(buffer);
cout<<buffer<<endl;
}

void str(char* str1){

int s=0;
while (*str1){
str1++;
cout<<++s<<endl;
}

}
在上述程序中,s达到20以上的值,超越了我定义的buffer[20],然而去掉"//",恢复了cin.getline......的作用,在运行时随便输入多少个字符,在执行时也s也不会超过20,这是为什么啊?

这可能是因为buffer定义的时候里面的内容是不确定的(不以\0结尾)。如果加cin.getline,它会对输入进行截取,并且将数组的最后一位置为\0

cin.getline就是获得一个最大长度不超过20个字符的(19或者19以下)的字符串,存储在buffer里面,这个时候buffer里面已经存储了一个字符串(例如
"abcde\0",因为C字符串是以\0结束的。、
然后,将这个字符串传给函数str的时候
while(*str1) //如果str的内容为0,那么while就不执行了
{
str1++; //将形参自增,即偏移一位,由于字符串的长度已经确定小于20,所以最终str1会偏移到\0的那个位置,这时*str1就为0了,while也就跳出了
}

cin.getline(buffer,20);
这里的原因有两点:
1 你调用的这个函数, 第二个参数你给置为20了
char buffer[20];
2 这个数组的大小就是20了,也就是说你只给分配了20字节大小的一个数组

getline的使用事项!

getline(buf, num, delim = '\n')
输入数据长度不足num的,将最后的\n字符利用\0代替。如果输入字符等于或超过num的只读取num - 1个字符,并将第num位置使用\0代替

您这是什麽意思呀