繁体   English   中英

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];

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM