0

我正在尝试将二维数组写入输出文件,除了创建 .getline 函数以将数组从文件中拉回之外,一切正常。我的问题是放置字符串长度。我当前的代码是;

inputFile.getline(myArray, [10][10], '\n');

但它似乎不喜欢将字符串长度放在方括号中,我该怎么办?

提前致谢

4

2 回答 2

2

要编译它,myArray必须是一个数组char,或者一个char*. 特别是,它是一个一维数组。要读取多个维度,您需要分别读取每一行。第二个参数 tostd::istream::getline是数组中读取和存储的最大chars 数减一。

要开始从文件中读取内容,您应该首先了解文件的写入方式。我希望你知道文件是如何创建的,但你没有在你的问题中描述这一点。了解文件的编写方式对于了解如何读取文件至关重要。请显示一些代码。

于 2008-12-10T20:46:20.170 回答
0

恕我直言Rob Kennedy,他歪曲了 C/C++ 如何处理多维数组。

考虑 int foo[10][10] 和 int foo[100]。在这两种情况下, foo 都是指向包含 sizeof(int)*100 字节的内存块的指针。

int *pointer 和 int foo[10][10] 之间存在细微差别。特别是关于 sizeof() 和某些特定于编译器的错误检查。但是,如果需要,我们可以互换处理它们。


也就是说,leachrode不能将getline()的参数 2 传递为"[10][10]"。他可以通过"10*10*sizeof(foo)",其中 foo 是myArray的类型。如果它实际上被声明为数组,他也可以传递sizeof(myArray) 。

变量myArray不一定需要是char类型。但是,如果该getline()调用将起作用,则 myArray 数据块中的任何字节都不能具有值 '\n' 。

就个人而言,我会选择二进制存储。例如:(假设inputFile是一个 iostream 对象。)

 inputFile.write( (const char *)myArray, sizeof(myArray) );
 inputFile.read( (char *)myArray, sizeof(myArray) );

*HOWEVER*,这确实假设您正在二进制兼容的系统上进行读写。我们正在假设您的编译器如何将该数组存储在内存中。不同的编译器可能会做不同的事情。填充和对齐问题可能会造成跨平台的噩梦。

从可移植性和未来维护的角度来看,单独读/写每个数组元素会更好! 就代码而言,它并不复杂。速度方面,iostreams 是缓冲的,无论如何你都受到磁盘 io 的约束......

参考:http ://www.cplusplus.com/reference/iostream/

Afterthought: - IF myArray in not an elementary type (int[], double[]), but instead represents an array of objects (with virtual members) or pointers, you'll need a means of serializing. Pointers won't point to valid memory when they are read back in.

于 2008-12-11T23:09:27.370 回答