我想做什么:
将记录存储在文件中。这些记录有两件事。
time_t rt; //which stores the time the record was entered by the user
与此同时,我想存储一个字符串。但是我不知道字符串的长度。
这将取决于运行时间,并取决于用户输入的字符数。
需要做什么(根据我):
我没有线索。我了解动态内存分配,但不知道如何将其应用于此类问题。
我尝试了什么:
我试图一次从用户那里获取一个字符并将其存储在文本文件中(临时)。
ofstream fileObject;
fileObject.open("temp.txt");
for(int j=0;;j++)
{
ch = _getche();
if( ch == 13) break; //user has pressed the return key
fileObject<<ch;
}
然后我使用以下代码找出文件的大小:
fileObject.seekp(0,ios::end);
long pos = fileObject.tellg(); //this is the size of the file
然后,我声明了文件大小的动态数组。
char * entry;
entry = new char[pos]
在“输出”模式下关闭文件,然后在“输入”模式下再次打开文件。
fileObject.close();
ifstream fout;
fout.open("temp.txt"); //this is the name of the text file that i had given
然后按字符将文本文件的内容复制到字符数组中:
for(int i=0;i<pos;i++)
fout>>info[i];
info[i] = '\0';
fout.close();
但是现在我不知道该怎么做。
我需要您帮助什么:
帮助我将此记录作为类对象写入二进制“.dat”文件中。
我的规格:
Windows XP SP 3
IDE:Visual C++ 2010 Express
最佳答案
对字符串有什么限制?那你呢
认识到用户已经输入了他想要的所有数据
字符串?
如果字符串必须是一行,我们可以假设
“合理的”长度(即很容易放入内存),然后
您可以使用std::getline
将字符串放入std::string
(用于输入),然后定义输出格式,
说"%Y-%m-%d %H:%M:%S: user string\n"
为
文件。如果用户字符串可以是几行,那么您将拥有
定义输入它们的协议(protocol)(这样您就可以知道何时
一条记录就完成了),而对于
文件:一个建议是将记录分隔为空
行(这意味着输入不能包含空行),
或使用以下行的记录头:"%Y-%m-%d%H:%M:%S line_count\n"
。 (Subversion使用
这是它的commit
消息的变体。还有一点
信息,但是,时间戳和行数
在那儿。)
关于c++ - 输入并存储一个字符串,该字符串的长度可以根据用户的意愿,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15063612/