What I want to do is read a file called "test.txt", and then have the contents of the file be a type const char *. How would one do this?
+1
A:
#include <string>
#include <fstream>
int main()
{
std::string line,text;
std::ifstream in("test.txt");
while(std::getline(in, line))
{
text += line + "\n";
}
const char* data = text.c_str();
}
Be careful not to explicitly call delete on data
Armen Tsirunyan
2010-10-24 20:14:43
+1
A:
You need to:
- create a function returning a const char*
- open an
fstream
on the file - seek to its end
- determine the file length by looking at the file position (
tell
) - seek back to the beginning
- create a char* to contain the file contents
- read the file contents into the char*
- return the char* pointer, with the function return adding the const
- the file is closed automatically by the fstream going out of scope
Will
2010-10-24 20:16:00
+1
A:
It's highly unlikely you really want to do that. The contents of the file (which may be either text, or binary data) are unlikely to represent a (valid) pointer to a char on your architecture, so it is not really meaningful to represent it [the content] as a const char *
.
What you may instead want is to load the contents of the file in memory, and then store a pointer (of type const char*) to the beginning of the given block. </pedantry> One way of achieving that:
#include <stringstream>
#include <fstream>
// ...
{
std::ostringstream sstream;
std::ifstream fs("test.txt");
sstream << fs.rdbuf();
const std::string str(sstream.str());
const char* ptr = str.c_str();
// ptr is the pointer we wanted - do note that it's only valid
// while str is valid (i.e. not after str goes out of scope)
}
eq-
2010-10-24 21:08:10