C++ 将二维数组写入输出文件-c++;
我试图将2d数组写入输出文件,除了创建.getline函数将数组从文件中提取出来外,其他都可以正常工作。我的问题是把字符串的长度。我当前的行代码是 getline(myArray,[10][10],'\n') 但它不喜欢把字符串长度放在方括号里,我该怎么办C++ 将二维数组写入输出文件-c++;,c++,file-io,multidimensional-array,C++,File Io,Multidimensional Array,我试图将2d数组写入输出文件,除了创建.getline函数将数组从文件中提取出来外,其他都可以正常工作。我的问题是把字符串的长度。我当前的行代码是 getline(myArray,[10][10],'\n') 但它不喜欢把字符串长度放在方括号里,我该怎么办 提前感谢编译,myArray必须是char或char*的数组。特别是,它是一个一维数组。要读取多个维度,需要分别读取每一行。第二个参数是数组中要读取和存储的chars的最大数目减去1 要开始从文件中读取内容,首先应该了解文件是如何写入的。我希
提前感谢编译,
myArray
必须是char
或char*
的数组。特别是,它是一个一维数组。要读取多个维度,需要分别读取每一行。第二个参数是数组中要读取和存储的char
s的最大数目减去1
要开始从文件中读取内容,首先应该了解文件是如何写入的。我希望您知道该文件是如何创建的,但您没有在问题中描述。了解文件是如何编写的对于了解如何从中读取至关重要。请出示一些代码。请尊重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对象。) *但是*,这确实假设您正在二进制兼容系统上读写。我们正在假设编译器如何将该数组存储在内存中。不同的编译器可以做不同的事情。填充和对齐问题可能会造成跨平台噩梦 从可移植性和未来维护的角度来看,单独读取/写入每个数组元素会更好代码方面没有太复杂。就速度而言,iostreams是缓冲的,而且您无论如何都会被磁盘io绑定 参考:
事后思考:-如果myArray不是基本类型(int[],double[]),而是表示对象数组(带有虚拟成员)或指针,则需要一种序列化方法。指针在被读回时不会指向有效内存。我们肯定需要更多信息。getline函数从文件中读取字符,因此您提供的数组表示法没有多大意义。正如Tfininga所建议的,我们首先需要查看用于将数组写入文件的代码。
inputFile.write( (const char *)myArray, sizeof(myArray) );
inputFile.read( (char *)myArray, sizeof(myArray) );