例如,如果我从用户那里获取学生姓名并使用cin.getline(student.name, 50);
我可以指定学生姓名。我无法通过student.name = "John Doe";
明确指定学生姓名,因为你不能只复制一个数组,但为什么当我使用getline函数时这会起作用?有什么不同?是不是getline()
收集了一个字符数组,然后将其复制到studnet.name
?
为了澄清,我问为什么我可以使用cin.getline(student.name, 50)
分配学生姓名而不是stuent.name = "John Doe"
两种方法之间有什么区别(为什么getline()
有效?直接分配不起作用。)
答案 0 :(得分:2)
请参阅以下C常见问题解答问题 - http://c-faq.com/aryptr/arrayassign.html和http://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]。
等等。
答案 1 :(得分:2)
如果您查看istream::getline函数istream& getline (char* s, streamsize n );
的参数列表,您会注意到它将您的变量student.name
作为指针。这允许getline直接写入c-string的内存位置。
编辑:请参阅评论中的Praetorian的答案,以获得更详细的解释。