【发布时间】:2012-03-22 05:25:49
【问题描述】:
我正在学习 C++,目前我正在使用字符串和指针。
我正在关注一本练习册,针对其中一个问题,我创建了以下内容:
#include <iostream>
#include <string>
using namespace std;
int main(void){
string * firstName=nullptr;
string * lastName=nullptr;
string * displayName=nullptr;
cout << "Enter your first name: " << endl;
getline(cin,*firstName);
cout << "Enter your last name: " << endl;
getline(cin,*lastName);
displayName=new string;
*displayName= *lastName + ", " + *firstName;
cout << "Here's the information in a single string: " << displayName;
cin.get();
return 0;
}
为了使用更多的指针,我尝试将它与字符串混合在一起,并因此使解决方案更加复杂。当我运行它时,我得到一个“未处理的异常:访问冲突读取位置 xxxxxxxxx”。
是否有人可以通过仍然使用指针和字符串而不是 char 数组来提出解决方案(我已经知道该怎么做)?
【问题讨论】:
-
您没有分配字符串,然后将空指针传递给
getline()函数...只需更改所有string *x = nullptr;' tostring x;` 或像您一样分配字符串在将它们传递给getline()之前使用displayName -
如果您刚刚开始“学习 C++”,那么您不应该靠近原始指针。它们是 C++ 中一个困难的、高级的、小众的部分,大多数“正常”的编程活动都不需要它。
-
当我对指针感到困惑时,这个video snippet 总是非常鼓舞人心;-)
-
如果这本书真的建议你使用指向 std::strings 的原始指针作为简单的局部变量,那就扔掉吧。
-
@KerrekSB:“你不应该靠近原始指针”我建议相反。从指针开始,使用 C 风格编程,远离字符串和 STL 等高级概念。几个月后,切换到 STL。 “它们是困难的、高级的”它们是 C++ 的基础部分(“基本素养”级别),你必须学习它们。如果不了解它们,您将无法实现自己的容器,也不会真正了解 STL 的工作原理。不会实现链表的人不能叫程序员,你懂的……