我正在使用Turbo C++ 3.0编译器
在使用以下代码时..
char *Name;
cin >> Name;
cout << Name;
当我输入空格的时候...它只保存在空格前键入的字符。就像如果我输入"QWERT YUIOP“...名称将包含"QWERT";
有什么解释吗?
发布于 2010-02-02 20:58:32
您需要为要读取名称的char数组分配空间。char *Name;
不会工作,因为它只声明一个字符指针,而不是一个字符数组。像char Name[30];
这样的东西
此外,cin <<
只允许我们在字符串中输入一个单词(char name30)。
但是,有一个cin函数可以读取包含空格的文本。
cin.get(name, MAX)
get将读取包括空格在内的所有字符,直到读取了最大字符数或达到行尾字符(‘\n’),并将它们放入名称变量中。
发布于 2010-02-02 21:03:12
当cin
用于读入字符串时,除非您另外指定,否则它会自动在空格处换行。
std::string s;
std::cin >> noskipws >> s;
或者,如果您想要获取整个行,则可以使用:
std::getline(cin, s);
您还需要为原始char
数组分配存储,但是对于C++,无论如何都应该使用std::string
或std::wstring
。
发布于 2010-02-02 20:58:25
您只是声明了一个不指向任何内容的字符指针。你需要为你的字符串分配空间。最常见的方法是在堆栈上分配空间,IE:
char Name[50];
请记住,字符指针本身只是将地址放到实际内存所在的位置。您仍然需要获取一个内存块,并将地址存储在指针中。上面的代码在堆栈上创建了一个名称数组,您可以使用Name存储最多49个字符,外加一个空终端。
或者,对于可变长度字符串,使用std::string。
https://stackoverflow.com/questions/2184125
复制相似问题