为什么cin.getline分配给字符数组但是使用'='不会?

时间:2012-11-25 04:29:45

标签: c++ arrays object variable-assignment getline

例如,如果我从用户那里获取学生姓名并使用cin.getline(student.name, 50);我可以指定学生姓名。我无法通过student.name = "John Doe";明确指定学生姓名,因为你不能只复制一个数组,但为什么当我使用getline函数时这会起作用?有什么不同?是不是getline()收集了一个字符数组,然后将其复制到studnet.name

为了澄清,我问为什么我可以使用cin.getline(student.name, 50)分配学生姓名而不是stuent.name = "John Doe"两种方法之间有什么区别(为什么getline()有效?直接分配不起作用。)

2 个答案:

答案 0 :(得分:2)

请参阅以下C常见问题解答问题 - http://c-faq.com/aryptr/arrayassign.htmlhttp://c-faq.com/aryptr/arraylval.html

我假设namechar name[something]

如果您要分配,请使用std::string类型而不是char array

更改您的

char name[50];

#include <string>
using std::string;

... ...

    string name;

... ...

现在您可以按照自己的意愿使用=

getline有效,因为在内部会做类似这样的事情

  • 读一个字符。

  • 指定名称[0]

  • 阅读下一个字符。

  • 指定名称[1]。

等等。

答案 1 :(得分:2)

如果您查看istream::getline函数istream& getline (char* s, streamsize n );的参数列表,您会注意到它将您的变量student.name作为指针。这允许getline直接写入c-string的内存位置。

编辑:请参阅评论中的Praetorian的答案,以获得更详细的解释。