2

我想使用 cin 向 char * 变量输入一个不定长度的字符串;

我可以做这个:

char * tmp = "My string";
cout << tmp << endl;
system("pause");

它完美地工作。

但我没有这样做:

 char * tmp
 cin >> tmp;

你能告诉我有什么问题吗?”

4

2 回答 2

7

好吧,你还没有为char*to 指向创建一个对象。

char* tmp = new char[MAX_LENGTH];

应该让它更好地工作(你必须定义 MAX_LENGTH)。另一种方法是:

std::string strtmp;
cin >> strtmp;
const char* tmp = strtmp.c_str();

这种方法意味着您不需要使用new.

于 2013-03-10T06:48:33.403 回答
3

几个问题:

char * tmp
cin >> tmp;

tmp 未分配(当前是随机的)。

operator>>(与 char* 或字符串一起使用时)读取单个(空格分隔)单词。

问题一:

如果您使用char*并分配一个缓冲区,那么您可能没有分配足够的空间。读取的字符可能比缓冲区中可用的字符多。一个更好的主意是使用 std::string (从这里你可以得到一个 C-String)。

问题 2:

没有办法读取不定字符串。但是您可以使用 . 一次读取一行std::getline

std::string line;
std::getline(std::cin, line);

char* str = line.data();
于 2013-03-10T06:55:47.963 回答