2

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

为了澄清起见,我问为什么我可以cin.getline(student.name, 50)用来分配学生姓名但不能stuent.name = "John Doe",这两种方法之间有什么区别(为什么getline()工作和直接分配不起作用)。

4

2 回答 2

2

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

我假设这里name是一个char name[something].

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

改变你的

char name[50];

#include <string>
using std::string;

... ...

    string name;

... ...

现在您可以=随心所欲地使用了。

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

  • 读一个字符。

  • 分配给名称[0]

  • 阅读下一个字符。

  • 分配给名称[1]。

等等。

于 2012-11-25T04:35:49.627 回答
2

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

编辑:有关更详细的解释,请参阅评论中 Praetorian 的回答。

于 2012-11-25T07:56:41.673 回答