C++中cin读取string为何无法获取含空格的完整内容?
问题原因与解决方法
你的问题根本不是c_str()的问题,而是cin >>这个输入操作符的特性导致的:
cin >>默认以**空白字符(空格、换行、制表符)**作为输入分隔符,它会先跳过开头的空白,然后一直读取直到遇到下一个空白就停止。所以你输入带空格的姓名时,程序只会读取第一个空格前的部分,剩下的内容还留在输入缓冲区里,根本没被读到string对象里。
解决办法
把读取姓名的代码换成getline(cin, sCusName),这个函数会读取整行输入,包括空格,直到遇到换行符为止。
修改后的代码示例:
#include <iostream> #include <string> using namespace std; int main() { string sCusName; cout << "Please enter your name-> "; getline(cin, sCusName); // 其实根本没必要转成char数组,直接输出string就行 cout << sCusName << " is a beautiful name." << endl; // 如果一定要保留char数组的转换逻辑,也可以留着,记得释放内存避免泄漏 /* int xsize = sCusName.length(); char *tempBuffer = new char[xsize+1]; strncpy(tempBuffer, sCusName.c_str(), xsize+1); cout << tempBuffer << " is a beautiful name." << endl; delete[] tempBuffer; */ return 0; }
额外提醒
如果之后你需要在getline之前用cin >>读取其他数据(比如整数),要注意cin >>会把输入末尾的换行符留在缓冲区里,导致getline直接读到空行。这时候需要在getline之前加一行cin.ignore()来跳过这个换行符。
内容的提问来源于stack exchange,提问作者ChandanaHK
相关产品推荐
相关产品推荐

