const char*未传递完整的文件名
const char* not passing full filename
我知道有很多类似的问题,但我不知道有任何相同的问题,所以我的问题是:
我正试图将一个文件名作为const char*传递给我的ifstream以进行读取和加载。
但是:当我传递文件名时,而不是读取整个字符串"map.obj";它只读取第一个字符"m",结果ifstream失败。
我不知道自己做错了什么,如果能给我一点帮助,我将不胜感激。我的代码如下:
#include <fstream>
using namespace std;
void loadModel(const char* filename);
int main()
{
// Creates and positions the four boxes on the screen. Temporary.
//rotation r = {0.0f, 0.0f, 0.0f};
const char* filename = "map.obj";
loadModel(filename);
return 0;
/*meshMgr.addObject(new Object());
position p = {0.f, 10.f, 10.f};
meshMgr.addObject(new Object(p, r));
p.y = 0.f;
p.z = 20.f;
meshMgr.addObject(new Object(p, r));
p.y = -10.f;
p.z = 10.f;
meshMgr.addObject(new Object(p, r));*/
}
void loadModel(const char* filename)
{
ifstream in(filename, ios::in); //Open the model file
if (in.is_open()) //if not opened, exit with -1
{
//Set up an array to act as a buffer for text read from the input file
char buf[256];
//Read input file text to end of file and push onto lines list
while (!in.eof())
{
in.getline(buf, 256);
//lines.push_back(new std::string(buf));
}
in.close();
}
}
编辑:在有人问之前,是的,该文件被引用为本地文件(我需要使用绝对路径吗?),并且与源代码存在于同一目录中
作为对我自己问题的回答,当变量中的数据以类似字符串的格式存储时,我的代码似乎不喜欢将存储文件名的变量传递为cost-char*。
为了抵消这种影响,我简单地将代码从更改为
int main ()
{
...
const char* filename = "map.obj";
loadModel(filename);
...
return 0;
}
void loadModel(const char* filename)
{
...
}
到以下位置:
int main ()
{
...
string filename = "map.obj";
loadModel(filename);
...
return 0;
}
void loadModel(string filename)
{
...
}
其中"…"表示问题中显示的更多代码。
这回答了问题中的错误,但以字符串开头,并使用char代替const char*。这是另一种解决方案。
const char*未传递完整文件名
std::string filename = "map.obj";
char *cstr = new char[filename.length() + 1];