gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 02:00:01 25 4
gpt4 key购买 nike

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

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 变量已被使用但未初始化。我做错了什么?

最佳答案

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

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

示例:

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

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

关于c++ - 使用函数读取未知长度的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2478881/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com