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

我知道getline(cin,_string); 完美运行

但这不会:

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

即使这样也行不通:

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

char* 不是字符串吗??

【问题讨论】:

    标签: c++ string getline


    【解决方案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>

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-13
      • 2011-08-05
      • 2011-10-12
      • 2012-01-10
      • 1970-01-01
      • 2017-03-07
      相关资源
      最近更新 更多