写2d数组到输出文件 - c ++

时间:2008-12-10 20:25:41

标签: c++ file-io multidimensional-array

我正在尝试将2d数组写入输出文件,除了创建.getline函数以将数组从文件中拉回来之外,它们一切正常。我的问题是把字符串长度。我目前的代码是;

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

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

提前致谢

2 个答案:

答案 0 :(得分:2)

要编译,myArray必须是charchar*的数组。特别是,它是一个一维数组。要阅读多个维度,您需要分别阅读每一行。 std::istream::getline的第二个参数是要在数组中读取和存储的char的最大数量减去1。

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

答案 1 :(得分:0)

非常尊重 Rob Kennedy ,他歪曲了C / C ++如何处理多维数组。

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

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

从便携性和便携性来看会更好。未来的维护视角,单独读/写每个数组元素! Codewise它并不复杂得多。速度方面,iostream是缓冲的,无论如何你都被磁盘io绑定了......

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

事后补充: - IF myArray不是基本类型(int [],double []),而是代表一个数组对象(使用虚拟成员)或指针,您需要一种序列化方法。当读回指针时,指针不会指向有效的内存。

豫ICP备18024241号-1