读取文件,然后创建数组函数C++
Read File then Create Array Function C++
我是C++新手,最近我在读取文件时遇到问题。该问题现已修复。我现在想做的是使用我读取的文件创建一个数组,但所有这些都必须在函数中完成,这意味着该函数必须返回一个数组,以便我可以在 main 上使用它。我遵循的过程:
- 读取文件
- 创建阵列
- 返回阵列地址。
-
主要:使用函数将数组放入变量中。到目前为止我的代码:
#include <iostream> #include <fstream> #include <cstdlib> #include <string> using namespace std; void imprimeArreglo (int[],int); int* leeArreglo(string&); int i; void imprimeArreglo(int a[]) { cout << a[i] << endl; } int* leeArreglo(string nombre) { ifstream arch(nombre.c_str()); string tamStr; int tam; if(arch.is_open()) { getline(arch,tamStr); tam=atoi(tamStr.c_str()); int arr[tam]; for(int i=0;i<tam;i++) { arch >> arr[i]; } int *ret=arr; return ret; } return 0; } int main() { string nombre = "arr.txt"; int *a= leeArreglo(nombre.c_str()); imprimeArreglo(a); return 0; }
我的
arr.txt
文件是什么样子的:10 9 8 22 33 76 0 23 100 -8 45
我认为这应该打印(带有imprimeArreglo(a)): 9 8 22 33 76 0 23 100 -8 45
但我在控制台中得到的唯一内容是: 2292592
我认为这是一个记忆地址???我做错了什么?有没有更好的方法可以在不使用向量的情况下做到这一点?
提前感谢!
这将是一种简单的方法:
#include <iterator>
#include <vector>
#include <fstream>
std::vector<int> fileContents(const std::string& filename)
{
ifstream inputFile(filename.c_ctr());
std::istream_iterator<int> end;
std::istream_iterator<int> it(inputFile);
return std::vector<int>(it, end);
}
这会将所有数字读入向量。您可能需要修改它以忽略第一个10
,例如在初始化it
后立即调用std::advance(it, 1);
。
您正在返回对局部变量的引用。当你的函数超出范围时,数组arr被释放,因此地址返回只是垃圾。如果要返回调用函数后仍然存在的地址,请执行以下操作:
int *arr = new int[tam];
然后,在调用函数后,地址将有效,但就设计而言,这不是很好,因为您将释放数组的责任留给了调用方。我会亲自将所有这些包装在一个类中,并拥有它的数组成员。
好的,经过一些研究和咨询,我得到了答案!谢谢大家:)帮助我。这是使事情发生的代码(使用数组!!
int* readArray(string name)
{
ifstream fil(name.c_str());
string sizeStr;
int size;
if(fil.is_open())
{
getline(fil,sizeStr);
size=atoi(sizeStr.c_str());
int* arr = new int[size+1];
for(int i=1;i<size+1;i++)
{
fil >> arr[i];
}
//We stash the size in the first position ;)
arr[0]=size;
//cout << arr[0]<< "n";
//We point to the position of the array + 1. (The 0 pos is used for the size)
int *ret=arr+1;
return ret;
delete[] ret;
}
else cout << "ERROR...!n";
return 0;
}
如您所见,我的函数返回一个指针。我删除了它。(仍然需要看看该delete[]
是否定位良好。另外,由于我返回的是一个指针,因此我无法真正知道我的数组的大小正在使用sizeof(arr)/sizeof(int)
.所以我所做的是将其保存到数组的位置,这样我就可以随时使用 array[-1]
调用它。
再次感谢大家!
- C++中的高效循环缓冲区,它将被传递给C样式数组函数参数
- 打印 2D 动态数组 c++ 函数
- C++数组函数
- 在数组函数指针中调用void
- 数组函数似乎没有找到最大值
- 使用数组函数和循环求解伪元编码|C
- 在头文件中的函数原型中获取指针数组:函数声明为 void
- 数组函数错误输出
- 读取文件,然后创建数组函数C++
- 指针数组函数参数-奇怪的行为
- 二维数组 - 函数
- "return"没有从数组函数返回正确的值
- 数组函数问题
- 数组函数的大小返回 int 的大小而不是数组
- 从数组函数中删除元素
- 如何从C++中最好地调用具有C99风格数组函数签名的函数
- 追加/打印/插入数组c++函数问题
- 如何将数组函数转换为指针函数
- 多维数组函数输出垃圾
- C++:数组函数的递归最大值