我需要创建Title
(它是类的数据成员),它是一个可变大小的字符串,它是动态创建的,默认为空字符串。
在一个类中,我创建了一个成员函数setTitle()
,提示用户输入标题,
它如下:
Book &setTitle()
{
char *title="";//the array that is supposed to hold the input
cout << "Title: ";
cin >> title;//take the input
Title = new char[strlen(title)+1];//create a char array for Title of size same as title with an additional for '\0'
assert(Title != 0);
strcpy(Title, title);//copying content of title to Title
cout << Title;
return *this;
}
当我运行它时它没有给我任何错误,但是当我为Title
设置一个值时它会停止响应。所以我需要知道如何接受来自用户的输入到一个字符指针(或者不管它叫什么,这里是行cin >> title;
)。
答案 0 :(得分:2)
您正在从输入流中读取字符串文字。这不是一个好主意,因为它会选择以下重载:
basic_istream& operator>>( void*& value );
不应该与C字符串一起使用(应该是const
)。
您应该使用std::string
代替:
Book& setTitle() {
std::string title;
std::cout << "Title: ";
std::cin >> title;
Title = title;
std::cout << Title;
return *this;
}
答案 1 :(得分:1)
在本声明中
char *title="";//
定义一个指针,该指针指向仅包含终止零的字符串文字。在C ++中,字符串文字具有常量字符数组的类型。所以编写
会更正确const char *title="";//
即使您将定义没有限定符const的指针,也可能无法更改字符串文字。
有两种方法。要么使用类std::string
而不是指针Title,要么在函数读取数据中使用本地字符数组,并根据输入数据的长度分配指针Title并将字符数组复制到其中。例如
Book &setTitle()
{
const size_t N = 100;
char title[N];
cout << "Title: ";
cin.getline( title, N );
Title = new char[strlen(title)+1];//create a char array for Title of size same as title with an additional for '\0'
assert(Title != 0);
strcpy(Title, title);//copying content of title to Title
cout << Title;
return *this;
}