C / C ++读取未知长度的char *输入

时间:2016-11-04 12:43:25

标签: c++

我想知道是否可以读取未知大小的字符串,直到空格或直到达到换行符。我在c ++中所做的是:

char * dynStr;
char buffer[20];

cin >> buffer;
dynStr = new char[strlen(buffer) +1];
strcpy(dynStr, buffer);

但问题是,如果输入的输入大于20,该怎么办?所以我认为它应该是这样的:

do
{
 cin.get ( buffer, 20, ' '); //im not sure this is the right approach
 strcpy(.....); // if is not  a first iteration 
 //add the new buffer to the  end of dyn str..
} while( ! read ' ' or '\n' ) <--- this is what I have problem doing

我知道在c ++中我可以使用std::string,但我想知道如何做这件事,所以如果你有任何想法,请告诉我:)

1 个答案:

答案 0 :(得分:2)

get()和其他几种方法只能读取,直到读取了一个特定字符。您希望在收到换行符或空格之前阅读。

对于这样的简单情况,最好只使用

cin.get();

一次读取一个字符,将其附加到字符串,检查每个字符的空格或换行符。根据您的具体情况,您可能还需要使用peek();

这可能效率不高,但对于从流中读取的简单优异,这将是一个很好的起点。完成后,您可以阅读read()方法的文档,并实现更复杂的算法,从流中读取和缓冲更大的文本块,然后手动搜索每个读取缓冲区以进行下一步空格或换行符,如果找到,则将剩余文本保存在缓冲区中以便稍后处理。

从一个简单的初始逻辑开始,一次读取一个字符,然后进入更复杂的方法。