getline(cin,_string);

Posted

技术标签:

【中文标题】getline(cin,_string);【英文标题】: 【发布时间】:2012-08-19 12:39:17 【问题描述】:

我知道 完美运行

但这不会:

char* _chArr = new char;
getline(cin,_chArr);

即使这样也行不通:

char* _chArr = new char[30];
getline(cin,_chArr);

char* 不是字符串吗??

【问题讨论】:

【参考方案1】:

不是 char* 是字符串

不,它是指向char 的指针,仅此而已。函数std::getline 做了一些在char * 上不容易完成的很酷的事情(扩展字符串等等)。

【讨论】:

不是 char* x =new char;一个字符串? @user1609974 不,不是。它是一个指针,您只分配了一个字节。 @user1609974 That's right. 所以我必须使用 cin.getline 来使用 char* 并指定之前的长度 @user1609974 不确定您的意思。你在用什么 C++ 书?【参考方案2】:

请从逻辑上考虑。 char* 只是一个指向字符类型内存块的指针。您必须为其分配一些动态内存,然后使用 strcpy() 或手动将数据复制到其中。 C++ 不支持直接输入。字符串实际上是自身包含大小的对象。它们是由该行业的专家设计的,它们提供了直接输入和动态增长,就像内置功能一样。 字符串和 cstring 是有区别的。 Cstring 是 char*。

【讨论】:

对不起各位,我已经在上面的代码中输入了“new”!不是 char* x =new char*;或 char* x =new char* [100];这两个不被认为是字符串吗?? 不,你非常非常困惑。尽管字符串可能看起来像字符数组,但它本身就是一种类型。它们相似,但不一样。这就像说一个与你有相似之处的人——就是你。这不是真的,编译器是绝对的。如果您有一些 char* 出于某种原因想要传递给 getline() - 您需要先将其转换为字符串。 这些被认为是 cstrings。不要将 cstrings 与字符串混淆。 cstring 中不允许直接输入。在字符串或静态 char 数组中输入,然后将数据复制到 char* 可以这样操作..... char str[50] ; cin.getline (str, 50) ; _chArr = 新字符 [strlen (str)] ; strcpy (_chArr, str) ;【参考方案3】:

不,C++ 字符串只是字符数组,它们是一个成熟的类,通常除了字符数组提供的功能之外,还有很多额外的东西。 p>

【讨论】:

以上是关于getline(cin,_string);的主要内容,如果未能解决你的问题,请参考以下文章

1050 String Subtraction (20 分)难度: 简单 / 知识点:模拟

使用 getline(cin, string) 时,cin 自动取值,无需询问

getline(cin, string_name) 之前需要 cin.get()

string 类型的输入操作符 cin 和 getline 函数分别如何处理空白字符?

关于 getline(cin, string) 的 C++ 快速问题

std::cin.getline() 与 std::cin