我正在尝试将2d数组写入输出文件,除了创建.getline函数以将数组从文件中拉回来之外,它们一切正常。我的问题是把字符串长度。我目前的代码是;
inputFile.getline(myArray,[10] [10],'\ n');
但它似乎不喜欢方括号中的字符串长度,我该怎么办?
提前致谢
答案 0 :(得分:2)
要编译,myArray
必须是char
或char*
的数组。特别是,它是一个一维数组。要阅读多个维度,您需要分别阅读每一行。 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 []),而是代表一个数组对象(使用虚拟成员)或指针,您需要一种序列化方法。当读回指针时,指针不会指向有效的内存。