好吧,我有这个程序使用c字符串。我想知道是否有可能将未格式化的文本块读入std :: string?我用if >>
玩弄了一下,但是它逐行读取。我一直在破坏我的代码,并试图使用std :: string撞墙,所以我认为是时候招募专家了。这是一个工作程序,您需要提供一个文件“a.txt”,其中包含一些内容以使其运行。
我试图愚弄:
in.read (const_cast<char *>(memblock.c_str()), read_size);
但它表现得很奇怪。我不得不std::cout << memblock.c_str()
来打印它。并且memblock.clear()
没有清除字符串。
无论如何,如果你能想到一种使用STL的方法,我会非常感激。
这是我的程序使用c-strings
// What this program does now: copies a file to a new location byte by byte
// What this program is going to do: get small blocks of a file and encrypt them
#include <fstream>
#include <iostream>
#include <string>
int main (int argc, char * argv[])
{
int read_size = 16;
int infile_size;
std::ifstream in;
std::ofstream out;
char * memblock;
int completed = 0;
memblock = new char [read_size];
in.open ("a.txt", std::ios::in | std::ios::binary | std::ios::ate);
if (in.is_open())
infile_size = in.tellg();
out.open("b.txt", std::ios::out | std::ios::trunc | std::ios::binary);
in.seekg (0, std::ios::beg);// get to beginning of file
while(!in.eof())
{
completed = completed + read_size;
if(completed < infile_size)
{
in.read (memblock, read_size);
out.write (memblock, read_size);
} // end if
else // last run
{
delete[] memblock;
memblock = new char [infile_size % read_size];
in.read (memblock, infile_size % read_size + 1);
out.write (memblock, infile_size % read_size );
} // end else
} // end while
} // main
如果您发现任何可以使此代码更好的内容,请随时告诉我。
答案 0 :(得分:4)
不要使用std::string
,而应考虑使用std::vector<char>
;通过调用const_cast
的结果std::string::c_str()
,可以解决所有问题。在开始使用之前,只需将矢量调整为您需要的任何大小。
如果要打印内容,可以通过将空终止符推到后面来空终止向量的内容:
std::vector<char> v;
v.push_back('\0');
std::cout << &v[0];
或者您可以将其转换为std::string
:
std::vector<char> v;
std::string s(v.begin(), v.end());
这一切都假设您有一些要从二进制文件中读取的文本块。如果你试图打印二进制字符,显然这不起作用。你的问题并不完全清楚。