You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 19:20:35