gets输入字符串,其可以无限读取,不会判断上限,可以包含空格,以回车结束读取。
因为该函数可以无限读取,所以应该确保buffer(缓存)的空间足够大,以便在执行读操作时不发生溢出。如果溢出,多出来的字符将被写入到堆栈中,这就覆盖了堆栈原先的内容,破坏一个或多个不相关变量的值。
一、用%c循环输入直到遇到换行结束
int main()
{
char str[100];
char ch;
int i=0;
while(scanf("%c", &ch) && ch != '\\n')
{
str[i++] = ch;
}
str[i] = '\\0'; //手动把字符串末尾字符赋值成'\\0'
//系统以'\\0'判断字符串结
cout << str << endl;
return 0;
}
二、用getchar()循环输入直到遇到换行结束
这个方法从原理是跟上面的方法是一样的,只是写法不一样,下面直接放上参考代码:(值得注意的是末尾仍要赋成'\0')
int main()
{
char str[100];
char ch;
int i=0;
while((ch = getchar()) != '\\n')
{
str[i++] = ch;
}
str[i] = '\\0'; //手动把字符串末尾字符赋值成'\\0'
cout << str << endl;
return 0;
}
三、c++中的getline()方法
string str;
int len=str.size();
getline(cin,str);