【发布时间】:2012-11-12 22:51:27
【问题描述】:
例如,如果我从用户那里获取学生姓名并使用cin.getline(student.name, 50);,我可以分配学生姓名。我无法通过student.name = "John Doe"; 明确指定学生姓名,因为您不能只复制一个数组,但是为什么当我使用 getline 函数时这会起作用?有什么区别?不是getline()收集了一个字符数组然后复制到studnet.name吗?
为了澄清,我问为什么我可以使用cin.getline(student.name, 50) 分配学生姓名而不是stuent.name = "John Doe",这两种方法有什么区别(为什么getline() 有效而直接分配无效)。
【问题讨论】:
-
name是char数组吗?如果是这样,数组是不可分配的,所以你不能写arrayname = "blah";。此外,除非您有充分的理由不这样做,否则您应该使用std::string而不是char数组。 -
@Praetorian 你的评论似乎是一个合适的答案,为什么不这样做呢?
-
我不是在问如何分配
char name[50] = "John Doe",我是在问为什么cin.getline(student.name, 50)有效而直接分配无效。最后我问的是2之间有什么区别。 -
@Howdy_McGee
basic_istream::getline将 pointer 指向 char 数组并写入该指针指向的任何位置。该语言定义了从数组到指向数组第一个元素的指针的隐式转换,因此当您说cin.getline(student.name, 50)时,指向name成员第一个元素的指针将传递给getline。直接分配给数组不起作用,因为它没有在 C 或 C++ 中定义。 -
@user93353 我从来没有说过
getline能够在单个语句中对指针进行赋值,当然它必须逐个字符地完成。而且我不明白您为什么要谈论getline在本地重新分配指针;我的评论清楚地表明写入指针指向的任何位置
标签: c++ arrays object variable-assignment getline