我正在尝试将二维数组写入输出文件,除了创建 .getline 函数以将数组从文件中拉回之外,一切正常。我的问题是放置字符串长度。我当前的代码是;
inputFile.getline(myArray, [10][10], '\n');
但它似乎不喜欢将字符串长度放在方括号中,我该怎么办?
提前致谢
我正在尝试将二维数组写入输出文件,除了创建 .getline 函数以将数组从文件中拉回之外,一切正常。我的问题是放置字符串长度。我当前的代码是;
inputFile.getline(myArray, [10][10], '\n');
但它似乎不喜欢将字符串长度放在方括号中,我该怎么办?
提前致谢
要编译它,myArray
必须是一个数组char
,或者一个char*
. 特别是,它是一个一维数组。要读取多个维度,您需要分别读取每一行。第二个参数 tostd::istream::getline
是数组中读取和存储的最大char
s 数减一。
要开始从文件中读取内容,您应该首先了解文件的写入方式。我希望你知道文件是如何创建的,但你没有在你的问题中描述这一点。了解文件的编写方式对于了解如何读取文件至关重要。请显示一些代码。
恕我直言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.