使用函数读取未知长度的文件

时间:2010-03-19 16:24:39

标签: c++

我正在尝试编写一个简短的函数,它可以让我快速读入一个未知大小的文件,并返回指向数组数组和该数组长度的指针,但似乎我的代码无效。我做错了什么?

int readIn(int* pointer, param parameters, string description)
{
    string fileName = parameters.fileName + " " + description + ".bin";

    ifstream readFile;
    readFile.open(fileName.c_str(), ios::in|ios::binary|ios::ate);  

    int size = readFile.tellg();
    int length = size / 4;
    int* output = new int [length];

    readFile.seekg (0, ios::beg);
    readFile.read(reinterpret_cast<char*>(output), (size));
    readFile.close();

    pointer = output; // link new array with the pointer
    return length;
}

并在主要功能中:

int* testList;
int numEntries = readIn(testList, parameters, "test");

我最终得到一个错误,说我的testList变量已被使用且未初始化。我做错了什么?

3 个答案:

答案 0 :(得分:2)

在函数调用之后,您没有在指针变量中返回任何内容。

您可以通过取消引用它的地址来填充变量,使其值在函数调用后保持更改。

示例:

void fillX(int *p)
{
  //p holds a memory address, go to that memory address and change its value
  *p = 4;
}


void main(int argc, char **argv)
{
  int x;
  fillX(&x);
  return 0;
  assert(x == 4);
}

要更改指针指向的内容,您需要传入指向指针的指针。

即。你需要传入指针的地址,然后你需要参数类型为int** pointer。设置后,您会说*pointer = buffer;

示例:

void fillPointer(int **pp)
{
  //p holds a memory address to a pointer 
  //Go to that memory address and change its value
  *pp = new int[10];
}


void main(int argc, char **argv)
{
  int *x;
  fillPointer(&x);
  //x now points to the first element of an array
  delete[] x;
  return 0;
}

关键点:当您想通过参数更改值时,您需要传入它的地址,然后取消引用它以设置该地址的内容。

答案 1 :(得分:1)

int readIn(int** pointer, param parameters, string description)

...

*pointer = output

 ...

int numEntries = readIn(&testList, ...)

答案 2 :(得分:0)

我可能在这里错了,但也许你需要完成你的功能,

int readIn(int **pointer, param parameters, string description)

,即指向指针的指针。用它打电话,

int numEntries = readIn(&testList, parameters, "test");

vars在C / C ++中按值传递。